196の日記

完全に開発メモと雑談、その他忘れそうな計算式などを書き溜める場所になっています!

Unity(雑談) バトルシーンにおける敵と味方のスクリプトについて

どうも!三日間寝込んでおりました。今日は一時間ほどunityに触ってリハビリといったところでしょうか笑 少しいじっていました。


ユーザが触るプレイヤーとその敵のスクリプト

 自分なりにしっかり考えてから制作を始めたつもりだったのですが、やはり詰めが甘いところがボロボロとありますね!どうもその見出しの二人のスクリプトが類似するんですよね。。いや、類似することなんてみんな承知なことなのですが、全てが同じわけではないわけで、僕はやはり今回は分けるべきだなと思ったんです。しかし、コーディングをしていると自分なりに「ここはこうしたほうが流用性があるな、、」って部分が出てくるわけで、そこをいい方向に修正していたら結果的に「あれ、この二人のコントローラほぼ同じになっちゃった」とか「同じコードを二つのスクリプトに追加してるよ」なんてなことがよく出てくるようになりました。

 コーディング中に修正をしていい形に持っていけるようになっているのは素晴らしい成長なんだと自分で思っています。なので、こうやって気づいたとこをここに書き残しておくことで次の制作の時に、さらにレベルアップのきっかけになるんじゃないかと思ってここに書き残します!(ポジティブに考えないとやっていけません!)

・アニメーションコントローラ及び、ダメージや魔法発動エフェクトは敵味方同じものを使用可能
 これは、人間しか登場しない紙芝居ちっくなものなら当然同じコントローラを使いまわせますが、戦闘シーンのようなものであっても攻撃モーションというものがそれぞれにあって、ノックバックのリアクションがあってそれの指示をアニメーターに渡すスクリプトなら使いまわせますねという考えです。使わないモーションを呼び出す関数は使用しなければいい話で。ただこの方法の難点は、関数にモーション名や技名を使用できないことです。つまり万人が一瞬で読んで理解できるスクリプトにはできないです。自分も見返した時に、メモが少なければ理解できない可能性もありますね。技1技2など、企画の時点でしっかりとそのキャラの技名と番号を対応させておくことで、これも回避は可能であると思うので、出てくるキャラやモンスターが多ければ多いほど、この案を僕は推すと思います。


・敵のコントロールスクリプトをまとめて一つのオブジェクトに貼り付け、流用する
 これは敵でなくてもたくさんの種類のモデルを用意して同じスクリプト群を同じように使用したい場合の方法についてです。Unityはpublicな変数にドラッグ&ドロップで直感的に紐付けができるので便利ですが、その操作をどこか一つでもやり忘れると読み込みエラーが起こります。(たまに何故かMissingになるけど)その例えを上げやすいのが、敵モンスターでした。
 で、僕は驚愕の事実を知りました。なんと、Animator は Avatar さえしっかり紐づけてやれば、子オブジェクトのモデルのアニメーション管理もすることができるのです。(これは教えて欲しかった) 何ができたかと言いますと、Animatorやそこに指示をだすアニメーションコントローラ、その他敵を操作するスクリプトは全てまとめて一つのオブジェクトに貼り付けてプレパブ化でもして、後はモデルごとにモデルをそのオブジェクトの子ノードに配置&アバターを紐付けしてあげると、なんといちいち全てチェックしながらスクリプトを貼り付けなくても、簡単に流用ができてしまった!
 少し前の僕は、モデルのオブジェクトに Animator やらスクリプトやらを全て貼り付け、それを新しいモデルのキャラを追加するごとに貼り忘れがないかチェックしながら作っていました。なので、これからはこれをぜひ使っていきたい!というか、偶然このダラダラの記事を読んでいる方がいたら、ぜひ真似してほしいです。


病み上がり&あいかわらずの国語力で、カオスな文になっているかも笑 まぁ、今日は親にLINEのフリーコインを貯めて上げて、ふなっしーのスタンプを購入させてあげることができたので、非常に満足です!(全く記事と関係ない)以上。早く体調良くなれ!!!