仕事ひーこらのえんちゃです。
前回はこちら
[UNITY]アクションゲームを作る(カメラ移動)[5]
突貫で作るプログラムの問題点、
それはプログラムを追加していくとどんどん見にくくなっていくということですね(汗
しかもUNITYは全部のオブジェクトにUPDATEを作れるので、うっかりすべてにUpdate機能をもたせたりした日には
どこにどの機能を置いたか忘れかねないですね。
なので今回はプログラム整理して、しっかりオブジェクト指向に作成し直していきたいと思います。
というのも死亡機能を作ったときに画面を暗転させたり、一つのクラスに書くのが限界になってきたからです。
なので早いうちにちゃっちゃとキレイに書き直しましょう。
イメージとしては一つの司令塔があり、こいつ動けーこいつ画面動かせーってイメージ
オブジェクト指向なので、細かな命令は出しませんが、こんな感じでしょうか
まず棒人間アクションのUPDATEは基本的にアクションを書いているので、MoveCharacterに書き直します。
また、引数を設定し生きているうちはtrue 死んだときに false を書くようにしましょう。
まだ、死亡メソッドを作ってないのでtrueのみですね。
棒人間クラス
public void Update() { … }
↓
public bool MoveCharacter() { … return true; }
カメラコントローラは今の所引数は必要ないので、Updateの名称だけ変えます。
カメラクラス
public void Update() { … }
↓
public bool MoveCamera() { … }
司令塔である、MainControllerクラスを使って、ここにいろいろなオブジェクトのUpdateを統一させていきます。
そのときに必要なのが、棒人間をここで作成(インスタンス化)するプログラム
Instantiate();
ドラッグ&ドロップするスクリプト
[GameObject].AddComponent().変数名 = 値
これを使って
メインクラスに棒人間を作成、カメラに追尾させる棒人間を設定する。を作っていきましょう。
メインクラス
public class MainController : MonoBehaviour { public GameObject MainCharacter; public GameObject Camera; private MainCharacterController CharacterScript; private CameraController CameraScript; void Start() { //棒人間作成 MainCharacter = Instantiate(MainCharacter); CharacterScript = MainCharacter.GetComponent(); //カメラにカメラコントローラーとキャラクタをセット Camera.AddComponent().mainCharactor = MainCharacter; CameraScript = Camera.GetComponent(); } void Update() { //カメラを動かす CameraScript.MoveCamera(); //キャラクターを動かす if (!CharacterScript.MoveCharacter()) { //死亡モーション /* あとで作る */ }; } }
これで完成です。
これでUpdateが一つに整理されて見やすくなりました。
実行した時、今までと変わらない動きをしているでしょうか?
次回死亡モーションを作っていこうと思います。
コメント