フリーランスプログラマーのsatoです。
よろしくお願いします!
今回はunityの基礎中の基礎「GameObject」について見ていきましょう。
まず「GameObject」が何者なのか、どんな要素で構成されているのか見てみましょう。
次に以下のようなGameObjectに対する、よくある疑問をまとめておきました!
・表示・非表示状態の取得・切り替え
・gameObjectを探す
・gameObjectを生成する
・「this」と「this.gameObject」の違い
ぜひ問題解決にお役立てください。
それでは早速見ていきましょう!
GameObjectとは?
そもそもGameObjectとは何なのでしょうか?
その答えを一言説明した良い言葉があります。
「ゲームオブジェクトは空の料理鍋、コンポーネントはゲームのレシピに含まれる様々な材料」
それが公式で、ゲームオブジェクトを説明する時に使われている一文です。
一見よくわからない例えですが…
しかし実はその本質を表したとても良い例えなんです。
「ゲームオブジェクトとは空の料理鍋」
そのことを頭に置き続きを見ていきましょう。
エディタ上で見てみよう!
エディタ上でGameObjectを見てみると、先ほどの「空の料理鍋」という例えがとてもよくわかりますので、一緒に見てみましょう。
以下はCubeオブジェクトを作成した直後の画面です。
みなさん一度は作ったことがありますよね?
この四角いオブジェクト自体が一つのGameObjectです。
今回はこの四角いGameObjectに注目して見ていきましょう。
画面内ではHierarchy上で選択中のGameObjectが保持しているコンポーネントが、Inspectorに一覧表示されています。
CubeというGameObjectは「Transform」「Cube(Mesh File)」「Box Collider」「Mesh Renderer」「Default-Material」といったコンポーネントを所持していることがわかりますね!
つまり今回は「GameObjectという鍋」に、上記5つの「コンポーネントという材料」を入れた結果「Cubeというオブジェクト」が成り立っているというわけです。
せっかくなので、初期に配置されているカメラとライトも見てみましょうか。
以下はカメラのInspector画面です。
カメラオブジェクトも結局のところ「空のGameObject」に「Cameraコンポーネント」などのカメラ関係のコンポーネントを追加したオブジェクトだということがわかると思います。
以下はライトのInspector画面です。
ライトも同じですね。
「空のオブジェクト」へ「Lightコンポーネント」を追加したことにより、ライトとしての機能を持ったオブジェクトとして機能しているんです。
GameObjectとは「空の料理鍋」
「ゲームオブジェクトは空の料理鍋、コンポーネントはゲームのレシピに含まれる様々な材料」
この言葉の意味がなんとなくわかったと思います。
今回見た「Cube」とは「GameObjectという空の料理鍋」に「5種類のコンポーネントという材料」を入れることで形作られていたわけですね。
つまりUnity上のオブジェクトは、すべて「GameObjectという空の料理鍋」に「コンポーネントという材料」を入れてできているわけです。
またつまり逆に言えば、GameObject自体は単体では何もできない存在でもあります。
何かを実現するためには、上手に材料を追加し、機能を付与する必要があるわけです!
コンポーネント
ここで材料として出てきたコンポーネント。
このコンポーネントは、Unityを扱ううえで非常に重要な要素です。
以下のリンクでもう少し深く説明しているので、参考にしてみてください。
よくある疑問点
次にGameObjectに関する、よくある疑問点についてまとめました!
それぞれきになる箇所があれば、ぜひ読んでおいてください!
表示・非表示状態の取得・切り替え
ゲームオブジェクトの数少ない保持情報の一つに、アクティブ・非アクティブ状態があります。
削除せずとも一時的に機能を止めることができる便利なパラメータですので、扱いを覚えておくことをお勧めします。
以下の記事で詳細をまとめています。
GameObjectを探す
プログラムを組んでいく上で、特定のGameObjectを取得したいタイミングは必ず発生します。
その方法は早めに学んでおきましょう!
次の記事で説明していますので、ぜひお読みください!
GameObjectを生成する
エディタ上では、右クリックから簡単にオブジェクトを作成できました。
しかしプログラム上からはどうでしょう?
それを実現するには、instantiate関数を学ぶ必要があります。
以下の記事で説明していますので、学んでおきましょう。
「this」と「this.gameObject」の違い
たまにスクリプト内で「this」と「this.gameObject」を混合して考えてしまっている人がいます。
しかし実際は全く別物なので気をつけましょう。
以下は、CubeオブジェクトにTestScriptを追加した結果です。
スクリプト内では「this」と「this.gameObject」をDebug.Log関数でログ出力しているだけのプログラムです。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TestScript : MonoBehaviour { void Start () { // thisをログに出してみる Debug.Log ("this = " + this); // this.gameObjectをログに出してみる Debug.Log ("this.gameObject = " + this.gameObject); } }
結果は以下の通りです。
つまり、それぞれ以下であることがわかりますね。
this・・・スクリプトを指す
this.gameObject・・・ゲームオブジェクトを指す
この辺り削除するときや、操作するときに間違えてつまずく初心者も多いので、気をつけましょう!
まとめ
「ゲームオブジェクトは空の料理鍋、コンポーネントはゲームのレシピに含まれる様々な材料」
今日はこのことをしっかり覚えておきましょう!
また各リンクの先にある内容もとても大事なことをまとめています。
ぜひ全部マスターして「Unity でもっとも重要な概念であるGameObject」をマスターしましょう!