Unityを使っていろいろなジャンルのゲームの作り方を学んでいる学生です。
早速ですが、Unityの公式チュートリアルTanks(戦車と戦車で戦うゲームです)にて、戦車を複数台Instatiate()必要する場面があります。そのときの実装方法が、私が今まで使ってきた方法と少し違ったので、どっちが良い実装なのか気になったので質問させてもらいました。
私が今まで使ってきた方法は、ゲームオブジェクトにスクリプトコンポーネントをアタッチして、そのスクリプトの中で体力や名前などを管理しています。それをPrefabにして、Instantiate()したゲームオブジェクトをGameObject型の配列に入れることで、まとめて管理しています。
一方、公式チュートリアルでは、戦車に関するクラス(以下、Tankクラスとします。MonoBehaviourは継承しません)を作って、そのクラスのメンバーの1つとして、GameObject型の変数を宣言します。それから、MonoBehaviourを継承した別のスクリプトで、TankクラスをInstantiate()して、さらにその中のGameObject型の変数にInstantiate()したゲームオブジェクトを代入しています。
まとめると両者の違いは、ゲームオブジェクトを複数まとめて管理したいとき、GameObject型の配列を作るか、Tankクラス型の配列を用意するかということです。別の見方をすれば、ゲームオブジェクトをベースにして種々の変数やメソッドを管理するか、Tankクラスのインスタンスをベースにして変数の1つとしてゲームオブジェクトを管理するか、と言えます。
個人的には、公式チュートリアルで採用されていた実装方法の方がforeachからTankクラスの各種のメンバーやメソッドにアクセスできて前者よりも書きやすい印象だったので以降はこちらを使っていこうか考えています。ただ、今までは前者の書き方で何とかなっていたので、後者の「書きやすい」以外のメリットをうまく言葉にできません。
きっと何か重要なことを見落としているのではないかと思うのですが...
以上が質問の内容です。両者の実装方法の長所・短所、私が見落としていること、の2点について回答よろしくお願いします。
また、もし比較的大規模なゲーム制作をされた経験があれば、どちらの方法を採用していたのかということも教えていただけたら幸いです。
よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/11 15:22