Unityのゲームオブジェクト(GameObject)とは?
Unityを使用した開発では、GameObjectへの理解がとても大切です。「オブジェクト」とは日本語で「物・対象物」などと翻訳されます。抽象的な概念ですが、ITの分野では「コンピューターの中で何かしらの操作・処理の対象となる目標」をオブジェクトと呼ぶことが多いです。また、プログラム内部では、「実体を想像できるモデル」のようなイメージで扱われ、クラスやインスタンスもオブジェクトの一部です。
GameObjectとは、Unityで開発するゲーム内の物体(キャラクター、背景、モノ、道具など)を定義する基礎的な概念です。Unityはゲーム開発に特化したエンジンであるため、オブジェクトの大半はGameObjectを使用して作成されています。また、GameObjectに対して「コンポーネント(属性や要素)」を追加していくことで、さまざまな外観・動きを持ったキャラクター・道具・背景などが完成するのです。そのため、「GameObject=空の容器・部屋」と考えて良いでしょう。
Unityではキャラクターや構造物など、目視でも確認できるオブジェクトが多数使われています。これらは、一般的に「GameObject」を使用して作成されます。
GameObjectの特徴
GameObjectのオブジェクトは、たとえばJavaなどのオブジェクト指向プログラミング言語のオブジェクトと同じ意味合いです。そのため、オブジェクト指向について知っている方はそのオブジェクトをイメージするとわかりやすいです。オブジェクト指向を知らない方も、以下の内容を把握しておけばイメージできるでしょう。
GameObjectは1種類しか存在しない
GameObjectを生成すると、そのGameObjectは単一のものになります。ゲームをプレイしているときに、キャラクターやアイテムの種類が唯一無二であることを考えるとわかりやすいでしょう。これらを構成するコンポーネント自体は複数種類がありますが、コンポーネントで作られるGameObjectは単一のものです。
ON/OFFでコンポーネントの挙動が変化する
GameObjectにはON/OFFの設定機能が付いています。GameObjectをOFFにすると、GameObjectに実装されているコンポーネントの機能はすべて停止されます。ONにすると、生成したGameObjectは機能します。GameObjectを機能させたくないときにOFFにしておくことで、GameObjectを削除せずに済むということです。
Transformコンポーネントが必ずセットされる
GameObjectを生成すると、必ずTransformコンポーネントがセットされます。Transformコンポーネントとは、GameObjectの位置・回転・拡大縮小などに関するコンポーネントです。生成されたGameObjectは座標や角度を設定できないと使えないので、Transformコンポーネントは必須ということです。Transformコンポーネントはほかのコンポーネントとは異なり、削除できません。
階層を作成できる
GameObjectを生成すると、Transformコンポーネント同様に階層も自動的にセットされます。階層というのはGameObjectをグループ化し、複数のGameObjectを同時に動かせるようになるということです。そのため、最初のGameObjectの場合は階層は一段になり、2つ目以降のGameObjectでもほかのGameObjectとは切り離して単一の階層にセットすることもできます。
thisとthis.gameObjectの違い
GameObjectに対してスクリプト内で実装する場合、this.gameObjectと記載します。スクリプト内のthis.gameObjectがGameObjectのことなので、thisというのはスクリプトを指します。Unityだけでなくほかのプログラミング言語でもthisは同じような使い方をするので、慣れておくと良いでしょう。
Unityにおけるゲームオブジェクトの利用方法
UnityにおけるGameObjectの基本的な利用方法を解説します。先述のとおり、Unityはノンプログラミングでもある程度のゲームを作成することが可能です。しかし、ノンプログラミングであっても以下に紹介するような利用方法を把握しておくことが大切になります。感覚的な操作で覚えていくことにくわえ、基本概念を学んでおくのがおすすめです。
GameObjectの取得方法
GameObjectを扱うために、まずはGameObjectを取得します。GameObjectを取得するには、コンポーネントを自作する必要があります。コンポーネントを自作して、これをGameObjectに追加し、コンポーネントからアクセスするという流れです。
自作コンポーネントの作成方法
自作コンポーネントを作成すれば、概ねGameObjectができあがります。自作コンポーネントといっても、AssetsメニューからCreateで簡単に作成可能です。細かい機能を実装するためにはプログラミングが必要ですが、コンポーネントを作成するだけならクリック操作のみになります。
GameObjectの基礎
Unityでは、まずGameObjectを作成し、その中にオブジェクトの属性を表す「コンポーネント」を追加することで、さまざまなオブジェクトを作成します。
たとえば、ゲーム内に「民家」を作成したい場合は、民家の容器となるGameObjectを作成し、「屋根の色」「壁の色」「窓」などをコンポーネントとして追加していくイメージです。また、コンポーネントは見た目だけではなく「動作」も定義可能なことを覚えておいてください。
基礎的な概念を確認したところで、ここからはGameObjectの生成・削除・非表示など基本的な操作を紹介します。
3Dオブジェクトの生成
Unityには「プリミティブオブジェクト」が用意されています。プリミティブオブジェクトとは、GameObjectのテンプレートやひな形のようなものです。プリミティブオブジェクトを使用すると、簡素なオブジェクトであれば比較的簡単に作成可能です。ここからは、Unityに実装されているプリミティブオブジェクトを6つご紹介します。
-
・Cube
・Sphere
・Capsule
・Cylinder
・Plane
・Quad
それぞれについて詳しく見ていきましょう。
Cube
「立方体」のGameObjectです。テクスチャを張り付けるだけで床や壁、岩などのオブジェクトを作成することができます。また、開発段階でモデルが完成していない場合に活用されるケースも多いです。たとえば乗り物のモデルが完成していない場合、Cubeを引き伸ばして寸法を合わせたオブジェクトを作成してコードテストなどが行えます。
Sphere
「球体」のGameObjectです。球体の表現(ボールや惑星など)に使用されることが多いプリミティブオブジェクトになります。また、半透明にして点滅や点灯などGUIに活用されるケースも多いです。
Capsule
「楕円上のカプセル」に似たGameObjectです。使用頻度は高くなく、未作成のオブジェクトの位置決めや仮置きなどに使用されます。単純な形をしているCubeと比べて物理演算のテストに向いています。
Cylinder
「円柱型」のGameObjectです。柱など構造物のパーツとして使われることが多いでしょう。
Plane
いわゆる「横置きの平面」です。板状のGameObjectで、横幅と奥行きを持つものの「厚み」の概念はありません。床や地面として使われます。なお、裏面から見ると描画されないことに注意してください。
Quad
こちらは「縦置きの平面」です。高さと幅を持つGameObjectだと考えてください。壁などの表現に使用されます。Planeと同じように裏側の描画はありません。
GameObjectを自動生成する方法
ゲームが進行している最中にGameObjectを自動生成することを「動的生成(インスタンス)」と呼び、「Instantiate関数」を使用して行います。Instantiate関数にさまざまなイベントを指定することで、「銃から次々に銃弾が発射される」といった連続的な動きのある表現が可能になります。
GameObjectの削除方法
一方GameObjectを動的に削除する場合は、「Destroy関数」を使用します。Destroy関数を使用することで、「オブジェクトが消えるタイミングや時間」などを自由に変化させます。
GameObjectの非表示化
生成や削除を伴わず、単に「見えない状態」を創り出す場合に使用するのが「SetActive」です。SetActiveに「false」をセットすることで、対象のGameObjectを非表示にできます。setActive:falseの状態はあくまで「見えない状態」でオブジェクト自体は残っている点にご注意ください。
スクリプトによるコンポーネント追加
GameObjectの操作とはやや趣が異なりますが、GameObjectにセットするコンポーネントをコーディングで追加することも可能です。新しいコンポーネントをC#スクリプトで作成し、適用したいGameObjectに追加することで、独自の質感や動作などを表現できます。C#スクリプトで作成したコンポーネントの追加方法としては、以下の3つがあります。
-
・ドラッグ&ドロップ
・スクリプト検索で追加
・管理ツールによる動的な追加
それぞれについて詳しく見ていきましょう。
ドラッグ&ドロップ
スクリプトを選択した状態で対象のGameObjectにドラッグ&ドロップを実行します。
スクリプト検索で追加
GameObjectを選択した状態で「Add Component」から作成したスクリプト(コンポーネント)を検索し、追加します。
管理ツールによる動的な追加
前述の2つは手動による静的な追加方法です。一方、動的にスクリプトを追加したい場合は管理スクリプトを使用します。プログラム内で管理スクリプト「AddManager」が希望するスクリプトを追加するようにコーディングを行います。
こうすることで、管理スクリプトが実行されると任意のコンポーネントがGameObjectに追加されるようになります。
Unityのゲームオブジェクトに関するよくある質問
Unityに関するQ&Aを確認していきましょう。Unityはプログラミングスキルやゲーム開発の知識がなくても、ある程度感覚的な操作で扱えるゲームエンジンです。しかし、基本的な概念や使い方について把握したうえでUnityを使い始めたほうが、上達は早いはずです。
Q1. Unity GameObjectとは何ですか?
Unity GameObjectとは、Unityで開発するゲームに登場する物体を定義する基礎概念。キャラクターや道具、背景を格納する容器のような概念になっている。
Q2. プリミティブオブジェクトの種類は?
Unity GameObjectのテンプレートであるプリミティブオブジェクトは以下の6つです。
-
・Cube
・Sphere
・Capsule
・Cylinder
・Plane
・Quad
Q3. C#スクリプトで作成したコンポーネントの追加方法は?
C#スクリプトで作成したコンポーネントの追加方法は以下の3つです。
-
・ドラッグ&ドロップ
・スクリプト検索で追加
・管理ツールによる動的な追加
まとめ
Unityは代表的なゲームエンジンで、ゲーム業界には欠かせないツールになっています。最近はゲーム開発以外にもUnityが使われるケースは増えており、今後は幅広い業界で使用されるでしょう。
Unityのスキルを高めるためには実際に手を動かしてみることが重要で、事前に基本的な知識を身につけておけば上達が早くなります。特にGameObjectはUnityを扱ううえで基本となるものなので、感覚的に操作するだけでなく、概要や操作方法をあらかじめ把握しておくのがおすすめです。
関連記事:Unityでできることとは?ゲーム分野以外の活用例も紹介
ITエンジニアの転職ならレバテックキャリア
レバテックキャリアはIT・Web業界のエンジニア職を専門とする転職エージェントです。最新の技術情報や業界動向に精通しており、現状は転職のご意思がない場合でも、ご相談いただければ客観的な市場価値や市場動向をお伝えし、あなたの「選択肢」を広げるお手伝いをいたします。
「将来に向けた漠然とした不安がある」「特定のエンジニア職に興味がある」など、ご自身のキャリアに何らかの悩みを抱えている方は、ぜひ無料のオンライン個別相談会にお申し込みください。業界知識が豊富なキャリアアドバイザーが、一対一でさまざまなご質問に対応させていただきます。
「個別相談会」に申し込む
転職支援サービスに申し込む
※転職活動を強制することはございません。
レバテックキャリアのサービスについて