GameObject・Transformについて!【Unity基本操作】

UnityにおいてGameObjectとTransformの操作は非常に重要です。MonoBehaviorを継承しているスクリプトでも気軽にアクセス出来るプロパティが用意されているこの2つのクラスに出来ることや、Unityでの操作方法を覚えましょう!

目次

GameObject編

GameObjectはUnityの中において非常に重要な単位です。ちなみにGameObjectもTransformもいわゆるクラスなんですが、どんなことが出来るかや、どのへんがGameObjectなのかを把握しておくととても便利です!

GameObjectとは

何と言われたらクラスです!なんですが、Unityを触る上でGameObject(もしくはオブジェクト)はヒエラルキーの中で選択できる一つ一つがGameObjectという風に覚えておくと良いかと思います。

UnityEditor上で出来ること

UnityEditor上でGameObjectに対して設定などが出来る場所は下図のインスペクターの赤く表示されているエリアになります。例ではBackgroundというGameObjectが選択された時を例にしています。変更できる箇所は7つほどあります。主要な箇所の説明は下表にまとめました。

場所説明
左上の箱マーク変更することでシーンビュー内で強調表示される。
アンカー的な目印として使用するときに便利
左上のチェックボックス
アクティブボックス
チェックのOn/Offでゲームオブジェクトのアクティブを制御
アクティブボックスと言う名前は勝手につけてます。名前教えて
Backgroundと入力された
テキストエリア
ゲームオブジェクトの名前が入力されている
ヒエラルキーでも名前変更は出来ますが、こっちでも可能
Staticの左側のチェックStaticなゲームオブジェクトにするかどうか。
目的が無い限り触らなくてもOK
影をBakedするときなんかはStaticじゃないと使えない
Static右側のプルダウン使ったこと無いです
Staticの種類でしょう
Tag(プルダウン)タグの設定が可能
スクリプトなんかで当たり判定の相手探しに利用したりします
Layer(プルダウン)Layerの設定が可能
当たり判定やカメラの可視判定などシステム側で利用されることがしばしば
スクリプトの当たり判定でレイヤーを使う場合はこれが重要になります

スクリプトで出来ること

スクリプト側で出来ることですが、わかりやすいのは「gameObject.」つまり「ゲームオブジェクトドット」で出てくるものがスクリプト側で操作出来ること一覧になります。この機能をサジェストと言います。上下でスクロールしたり、続きのアルファベットを入力することで絞り込みができたりします。この機能がとても強力なのでUnityと合わせてVisualStuduioを使うのを推奨してます。

すべてを解説すると量が多いので、この中でよく使われるメソッドやプロパティをいくつか紹介したいと思います。

メソッド or プロパティ使い方
SetActive(bool)GameObjectの機能をOn/Offすることが出来ます。
アクティブボックスのトグルと対応
activeSelf対象のGameObjectがアクティブかどうかを知ることが出来る
アクティブボックスの状態と一致します
GetComponent<T>()対象のオブジェクトについているコンポーネントを取得
Tには好きなクラスを指定することが出来ます
(ただしComponentクラスを継承しているもののみ)
この他にもsがついた複数形、Childrenがついた子オブジェクト以下も含めたものなど
派生したメソッドがあります。
AddComponent<T>()GetComponentとは逆で、コンポーネントを追加します。
機能が不足している場合はこれで強化
transformGameObjectからTransformにアクセス出来ます。
GameObjectの変数が渡されたら、Transformにアクセスできる!重要

実は上記などで書いたメソッドやプロパティは、GameObject固有ではないものも含まれます。正確には「GameObjectにアクセスできる」から利用できるというニュアンスが正しいですが、現状同義だと思っていても問題ありません。詳しいことが知りたい場合はComponentについて調べてみると良いでしょう

Transform編

UnityにおいてTransformを操作しないことはほぼほぼ無いでしょう!というぐらい重要なもう一つの単位。それがTransform(トランスフォーム)です!

Transformとは

ざっくりな説明をすると、位置!向き!大きさ!!に尽きます。インスペクターでもTransformを確認することは出来るのですが、UIはRectTransformというコンポーネントになっています(Transformが無いわけではありません)。

インスペクターでは各数字を変化させることで場所や向きや大きさを変更することが出来ます。ただ、インスペクターでの数値変更はある程度細かい数字調整やきっちり数字揃えたいときに使うのがよいと思います。実際の作業やる時には次の項目でのMoveToolなどを利用した方法で操作する方法をあわせて行うのが良いと思います。

エディター上での操作

Transformのパラメータはインスペクターで設定するのも良いですが、やはりシーンビューの中で調整できるのが最大の魅力でしょう。先程のBackgroundを選択している時に、左上の方にあるマークの中からMoveToolと呼ばれる上下左右の矢印マークを選択すると、3軸方向への矢印が表示されます。この矢印と直行している部分の3つの平面はそれぞれドラッグアンドドロップすることが可能です。対応した各軸もしくは平面方向に移動させることが出来ます。表示されているものをざっくり位置調整などしたい場合はシーンビューで合わせた後にインスペクターとかで微調整しましょう

ちなみにMoveToolの表示はバージョンが2021.2以降になると場所が少し変わっていますが、マークなどは似たものになっているはずなので照らし合わせながらやってみてください。

回転のRotateツールは球形。各線をドラッグ・アンド・ドロップで軸に沿って回転させることが出来ます。Scaleツールは各軸方向にスケールを変化させることが出来ます。また、中央の白いキューブをドラッグ・アンド・ドロップすると、3軸方向すべてのスケールを同時に変更することが出来ます。

スクリプトで出来ること

TransformはGameObjectよりいろんなことが出来ます。メソッド名を覚えておくと何やってるかなんかの理解がしやすいので簡単にでも目を通しておくと良いですね。よく使うメソッド(主観)は以下

メソッド・プロパティ説明
localPosition
localEulerAngles
localScale
インスペクターに表示される位置。実はローカル座標系の数字です
位置・向き・スケールはそれぞれはこちらになります。
up,right,foward自身の向きに対して上向きや右向き、正面などのベクトルを返します
parent親のトランスフォームが参照出来る
SetParent(Transform)自分の親を指定。言い換えると引数のTransformの子供になります。
ヒエラルキーの階層も変化しますよ
Translate移動させるメソッド
オーバーライドでいろんな引数が取れるので使いやすいのを選択してね
Rotate回転させるメソッド
ある軸に対して回転させたり、オイラー角で指定したり、色々出来る
LookAt向きを指定させるメソッド
ターゲットの方を向かせるとか注目演出なんかで使えますよ
Find自身の子供にあるTransformを得る。
GameObject.Findとの違いは自分のヒエラルキー以下にしか検索が及びません
つまり処理負荷が軽いってこと☆
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次