ブルーノのC#プログラミング & unity勉強日記

プログラミング素人、ブルーノの自主勉強ノートです。他のプログラミングを勉強したい方の助けになれば幸いです。その他趣味の雑記もしていきたいです

Unityスクリプト / ゲームオブジェクト編

f:id:covory10101101276:20180403220944j:plain

コモ湖 モルトラージオ イタリア

 

みなさんこんにちは🌚

新年度が開始して色々やることや把握することが増えたブルーノです。リアルが忙しくなってもこっちをまったり進めていきます🙄

今回は、スクリプトから直接行えるゲームオブジェクトに関する操作について勉強していきます。ゲームオブジェクトの中身の操作というよりは、生成や管理などを今回はまとめます。

 

UnityEngine.GameObjectクラス

今更ですがスクリプトからゲームオブジェクトを生成したりアクセスしたりするにはこのGameObjectクラスを使います。newキーワードでインスタンス化すればスクリプトからオブジェクトの生成ができます。その際のコンストラクタは以下のように指定することができます。

GameObjectクラスのコンストラクタ

public GameObject()

public GameObject(string name)

public GameObject(string name, System.Type, components)

string nameにゲームオブジェクトの名前、System.Typeにはその型、そしてそのゲームオブジェクトに付属させるコンポーネント名を指定することができます。

f:id:covory10101101276:20180403232139p:plain

何もパラメータを渡さずに実行してみました。

f:id:covory10101101276:20180403232241p:plain

[New Game Object]が追加されました。

 

CreatePrimitiveメソッド

今新しくゲームオブジェクトを生成しましたが、シーン上に目視できるようになるためには物体の形を示すメッシュやそれを描画するレンダラーなどのコンポーネントを必要とします。先ほどのコンストラクタからコンポーネントを指定する他に、CreatePrimitiveメソッドを利用することでゲームオブジェクトに基本モデル(プリミティブ)を追加することができます。

CreatePrimitiveメソッド

public static GameObject.CreatePrimitive(PrimitiveType type); 

typeの欄には基本モデルの図形の種類を指定します。

f:id:covory10101101276:20180403234325p:plain

f:id:covory10101101276:20180403234331p:plain

CreatePrimitiveメソッドで生成できる全ての基本モデルを適当に生成しました。PlaneとQuadの違いはポリゴンの数で、Planeは多くの頂点とポリゴンを持ち、Quadは4頂点2ポリゴンで構成されています。

 

Instantiateメソッド

エディタ上でゲームオブジェクトをコピーアンドペーストするだけで簡単にゲームオブジェクトを複製することができますが、これをスクリプトから行うこともできます。

Instantiateメソッド

public static Object Instantiate(Object original);

public static Object Instantiate(Object original, Vector3 position, Quaterion rotation); 

originalパラメータに複製するゲームオブジェクトを指定し、positionに複製する場所、rotationにその向きを指定します。positionとrotationを指定しないと複製元のオブジェクトと重なったり同じ向きになったりします。

f:id:covory10101101276:20180404000137p:plain

先ほどのスクリプトのキューブを複製しました。

f:id:covory10101101276:20180404000150p:plain

 

Destroyメソッド

ゲーム中にシーン中に作り出した弾やアイテム、エフェクトなどは消さなければいつまでも残り続けてしまいます。そこでこのDestroyメソッドを使ってオブジェクトを削除することができます。

Destroyメソッド

public static void Destroy(Object obj, float t);

objに削除するオブジェクトを、tには削除するまでの時間を指定できます。tを指定しなかった場合は0と同じですぐに削除されます。

f:id:covory10101101276:20180404001018p:plain

複製元のCubeを5秒後に削除します。

f:id:covory10101101276:20180404001054p:plain

なお、ゲームオブジェクトを削除する目的でこのメソッドを削除するオブジェクトのスクリプトに組み込み、パラメータに「this」を入れると、削除されるのはオブジェクトじゃなくてそのスクリプトになります。

 

Findメソッド

シーン上のゲームオブジェクトをスクリプトで名前から検索することができます。

Findメソッド

public static GameObject Find(string name);

nameパラメータにシーン上の名前を指定します。この名前による検索は負荷の高い処理であるため、Update()メソッドなどのフレーム単位で乱用するのは望ましくないそうです。

f:id:covory10101101276:20180404002703p:plain

「Cube」という名前のオブジェクトを検索し、cubeという変数にその情報を格納します。そして、Updateメソッドでその名前のオブジェクトを回転させます。もしCubeという名前のゲームオブジェクトがそのシーン上に見つからない場合は例外が投げられます。

f:id:covory10101101276:20180404002939p:plain

今回はここまでにしておきます。

 

色々便利なメソッドがあるようですね!!私は体で覚える派なのでこういったものを取り入れたゲームをどんどん作って実践していきたいと思います。頭の中のアイデアを早く形にできるようになりたいです。