この記事では、Unity初心者がよくわからなくなるコンポーネントについて、コンポーネントの基礎的な知識から、具体的に扱うあつかうためのコードをまとめています。
この記事で解決できるポイント
・コンポーネントの知識・使い方がわからない
・何ができる?何ができない?
・コンポーネントに関するスクリプト(追加・削除・取得)
コンポーネントはUnityでゲームやアプリをつくる上で欠かせない要素です。コンポーネントについて理解しておくことで、わからないことがわからない。←この問題を解決します。
この記事には、私がゲームアプリをつくるまでによく調べたこと、知っておけばよかったことを中心にまとめています。ここに書いてあることを一読しておけば、『わからないことがわからない』これを自力で解決できるはずです。
コンポーネントの基礎的な知識
コンポーネントとは?
Unity公式は以下のように解説しています。
・Components (コンポーネント)はオブジェクトやゲームでの振る舞いに関する心臓部です。ゲームオブジェクトはさまざまなコンポーネントの入れ物です。
Unityマニュアル「コンポーネントの使用」ページ一部抜粋
具体的なコンポーネントの役割はゲームオブジェクトに性質を持たせることです。例えばゲーム内で「車」を実装する場合、車には速度や重量、ボタンを押すと音がでる等の様々な性質が考えられます。ゲームオブジェクトを1つ用意して車に見立て、車の性質となるコンポーネントを追加することで、車を実装することができます。
Unity上ではコンポーネントはHierarchyビューでゲームオブジェクトをクリックした際に、Inspectorビューに表示されます。下の画像で区切られた1つ1つがコンポーネントです。
コンポーネントを使うと何ができる?
コンポーネントをゲームオブジェクトに追加していくことで、Unityのワールド上で様々なモノ・コトを実現できます。
例えばRigidBodyコンポーネントを追加することで、重力の影響を受けたり、衝突判定が行えたり、剛体の性質を持つゲームオブジェクトになります。
コンポーネントを使いこなすために必要なスクリプト
以下では、Unityでコンポーネントを使いこなすために必要なスクリプトをまとめます。ここに挙げるものは、私がUnityを学び始めたときによく調べたコードです。全部覚える必要はないので、最低限これらのコードを1度目に入れておけば、忘れても後々自分で調べるのが楽になります。
コンポーネントの追加・削除・オンオフ切り替え
コンポーネント追加・削除はUnityのエディター画面(起動時の画面)からAdd Componentを行いますが、スクリプトに記述することでシーン再生後に追加することも可能です。
コンポーネントの追加
1 2 3 4 |
コンポーネント型 変数名 = ゲームオブジェクト.AddComponent<コンポーネント型>() as コンポーネント型; //RigidBodyコンポーネントの追加※as コンポーネント型はなくても使えます。 RigidBody rb = gameObject.AddComponent<RigidBody>() as RigidBody; |
コンポーネント追加のコードの書き方はこれ以外にもtypeofを使う方法等、複数ありますが、一番簡単かつ覚えやすいこの書き方がおすすめ。
コンポーネントの削除
1 2 3 4 5 |
Destory(コンポーネント); //RigidBodyコンポーネントの削除 RigidBody rb = gameObject.GetComponent<RigidBody>(); Destroy(gameObject.rb); |
削除は簡単ですね。
Destroy()を用いてコンポーネントを削除するには、コンポーネントのインスタンスをコンポーネント取得のコードで作成する必要があります。
上のコードの下から2番目のやつです。詳しくはコンポーネント取得のコード解説に書きます。
コンポーネントのオンオフ切り替え
1 2 3 |
コンポーネント.enabled = true; //アクティブ化 コンポーネント.enabled = false; //非アクティブ化 |
コンポーネントのオンオフ切り替えをすることで以下のようなことが可能です。
例えばRigidBodyコンポーネントをオンオフ切り替えることで、オブジェクトを一定期間だけ物理演算に含まれないようにすることも可能です。
コンポーネント取得、変数を扱う
スクリプト内でのコンポーネントの取得方法は以下のコードを使います。
コンポーネントの取得
1 2 3 4 |
コンポーネント型 変数名 = ゲームオブジェクト.GetComponent<コンポーネント型>(); //RigidBodtコンポーネントを取得 RigidBody rb = gameObject.GetComponent<RigidBody>(); |
コンポーネント内の変数(フィールド)を扱う
1 2 3 4 5 6 |
コンポーネント.変数 rb.velocity //速度 rb.useGravity //重力が有効かどうか |
コンポーネントを呼び出した後に、「.」ドット演算子を付けて変数にアクセスすることができます。
Visual Studioをコードエディタに使用している場合は、自動補完機能によりコンポーネント内に含まれる変数の一覧が表示されます。
例えば、RigidBodyコンポーネントをGetComponentで読み込むと、以下のようなRigidBodyコンポーネント内の変数(フィールド)にアクセスできます。
変数の型はint型、float型、bool型などいろいろあるので、var型を使うと、型推論を勝手にしてくれるので便利です。
ここらへんのスクリプトに目を通しておけば自分で調べる際もすぐに解決できるはず。役立てたなら幸いです。
最後にUnityの学び始めた方には、以下の参考書での学習がおすすめ。どっちかを読み進めるだけでUnityの基礎的な扱い方をマスターできます。
私は、ねこの方で学習しました。
Unityの教科書 Unity2019完全対応版 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)
Unity2019入門 最新開発環境による簡単3D&2Dゲーム制作 (Entertainment&IDEA)