top of page

Spine2Dキャラコントローラにチェーンコンボ

執筆者の写真: BTA(Kelorin Jo)BTA(Kelorin Jo)

更新日:2020年3月11日

spineランタイムのサンプルを魔改造して、アクションできるまでにしました。


カプコン格ゲーとか朧村正ぽく動けるようになりました(理論上は)




敵のNPCもプレイヤーと同じコントローラで動いてるから2倍進展したことになります

これで攻撃アクションの個別性能や食らい判定などを設定したら、エリアル始動技から空中コンボ決めて夜露死苦して遊べるレベルに到達できそうです。

ここまできたら絶対完成させるぞう

次は体力とスコアとコンボ表示か、キャラのスポーンか、AIか…


●ここに来て、Unityの素キャラクターコントローラは2D向けではなく、レイヤーやタグも使えないぽいというヤバさ-同じコントローラを使ってる敵キャラが突進技などで貫通できない複数いると詰まる-なので、別のコントローラを見つけるか自作して置き換える必要が出てきました。


●今までプレイヤーキャラひとつしか動かしてなかったので一つのスクリプトで全て賄う作り方してましたが、複数のオブジェクト同士がお互いの特定の変数をやり取りする段階になり、

そこで使うのがアクセサー…ScriptableObjectづくりで使ったゲッターセッターのペアですが。

参考記事


変数の新規作成を、例えば

private int 変数名;

から

public int 変数名 { get; set; }

に書き換えると、この変数は外部(他のスクリプト・他のオブジェクト)から読み書きできるようになりました。

(正しくは変数だけど関数としても扱えるようになる)

これは短縮の記述らしくて

Public int 変数名;

Public int なんかわかりやすいメソッド名{ get{ return 変数名; } set{ 変数名=value;} }

とか

Public int 変数名;

Public int Get変数名() { return 変数名; }

Public int Set変数名(int a) { 変数名=a;}}

でも、同様の変数読み書き機能ができます(要staticだったりの制約があるかも)が、


{ get; set; }の短い文で済ませられること、今はじめて理解しました。


ただ、これをするとインスペクタに変数が出なくなり気軽に中身が視認できなくなるようです。

データの初期値入力用と代理で受け渡しする用の変数を分けて作るほうが、記述は長くなるけど使い勝手はよさげ


…独学では理解するまでめっちゃ悩んだけど、Unityの初歩チュートリアルに書いてあることなんだろうか。これ知らないとまともにゲーム作れないよね?


●効果音、攻撃ヒットなどで発動するイベントを作ってそこから音を出したら、

何故かPlayOneShotなのに連続で流れず、まさかと思って手打ちスクリプトで効果音を流してみたら普通にババババっと多段ヒットの音が出た。

えっイベントからPlayOneShotで音出してもPlay()と同じ扱いで、連射で出せないの?バグ?


●spineのモーションはUnityのアニメモーションと違って、イベントキーが複数同時に変数も送れるので(イベントキーを無視したら赤エラーなどというケチな作りではない)ので

spineのモーションに、イベントキー以外に攻撃防御などのコライダーなど諸々の設定を仕込むという作りにして、spine上からバランス調整できるようにしてみたのですが。

Unityとspine同時起動して作業すれば、混乱することなく複雑なゲームデータが作れる、デザイナー側がUnityをいじらずして分担も可能なはず…

けど、この方法ではもしかして処理落ちしたら大事なキーフレームがすっ飛ばされるのでは。

プランBも用意するべきかも


●プログラムは間あけると何してたかわからなくなるから、一つの実装には短期決戦で完成させたいのですが

外せない家庭の用事で外れた間に、同じ機能のちがう変数とスクリプト2つも3つも作ってしまった…

メモしてもメモの場所と意味も思い出せないのな。わかるように書こうとしたらそれこそスクリプトもう一つ作れるレベルの時間が


Comments


© 2016 BTA(Kelorin Jo)- Wix.com で作成されたホームページです。

bottom of page