■プログラミングメモ
■Unity
・ActionEvent
モーションの途中や最初、最後に追加すると、スクリプトの関数を呼び出すことができる。例
こいつを使えば、「Nフレーム目にショットを出す」といったことがAnimationウィンドウだけで設定出来る。
ちなみに、ショットなど生成して消したりはPrefab化したものをInstantiateでインスタンス化するのが定石っぽい。
詳細はUnity2Dのチュートリアルプロジェクト(特にGun.cs)参照。
Rocket.csには自身を2秒で消す処理もあるので参考になる。(1秒未満にしたい場合はアニメーションとかUpdate()内でTime.deltaTimeとか使って手動でDestroy(gameObject)すればOK。)
3Dだがチュートリアルプロジェクトの「Stealth」も参考になるので見るべき。
なおActionEventに登録できる関数には、条件として「引数が0個、またはint,float.doubleいずれか1個のみ」がある。引数を2個以上設定したり、他の変数タイプを指定すると一覧に出てこない。
(エラーも出ないので、出ないときは引数などをチェック)
なお、2つめ以降のスクリプトの関数を指定していると(Function not supported)と出ることがあるが、一応呼ばれては居る模様。よく分からん。
関連スレッド
・GameObjectの表示の切り替え
服装の変更に表示切り替えを使っている。ゲームオブジェクトの表示切り替えには、「RendererON/OFF」と、「Active/非Active切り替え」の二つの方法がある。
で、Recursiveに全部切り替えるのも良いが、一個一個切り替えたい場合もある。
その時はgameObject.SetActive()でOK。
で、現在有効(Active)かを知る方法は二つあり、activeSelfはそいつ自身のActive状態(true/false)がわかり、gameObject.activeInHiererchyは親が非Activeの場合は問答無用で非Active(false)になるといった調べ方ができる。
ヒエラルキーは何が嬉しいかというと、見えないgameObjectを弄る必要がなくなるという点。
Unity上では親が非Activeになると、子も全て非Active扱いであり表示されなくなる。
しかし、activeSelfだけだと親関係無くActive状態が取れてしまう。
ヒエラルキーを使う事で、親が非Activeな場合は子も全部非Activeとなり、そっとしておくことが出来る。
ちなみに、現在作っているゲームは服装/アーマー/下着と、それぞれの破損時/通常時の計6パターンある。
そのため、それぞれをタグ付けして、GameObject.FindObjectsWithTag()を使って一気に服装を取得する方法を取っている。
服装は頻繁に変えないので、処理的には問題無さそう。(大量の服Spriteを全部仕分けておく必要があるが。)
・疑似3D(ベルトアクションとか見下ろし用)
仮想地面を作ってみたが、他のキャラが普通に横方向でつっかえるので使えないことが判明。とりあえず数値で仮想地面を超えないように設定。
とはいえ、今のところあまり上手く動いてない。なんとかならないか試し中。
0 件のコメント:
コメントを投稿