Unityでオブジェクトを見つける(取得する)する方法をお伝えする。ゆっくり読んでいただきたい。
現在の状況
- Cubeが設置してある
- Cubeにスクリプトがアタッチしてある
Cubeにアタッチされているスクリプトに記述していく。スクリプト名は【Sample.cs】にしてある。
Find系のメソッドを使う
Find系のメソッドは多くあるので他記事にまとめる。1つの例をお伝えする。
GameObject.Find
シーン中からオブジェクト名に一致するゲームオブジェクトを1つ探す。
スクリプト例
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Sample : MonoBehaviour
{
GameObject objGet;
void Start() {
objGet = GameObject.Find("Cube");
}
}
GameObject.Find("オブジェクト名"); | シーン中からオブジェクト名に一致するゲームオブジェクトを検索 |
このようにすることでシーン中にある【Cube】という名前のゲームオブジェクトをobjGet変数に格納することができる。
メリット
- スクリプトでオブジェクトを簡単に取得可能
- Inspectorウィンドウでなにかする必要はない
デメリット
- 重くなる
- オブジェクト名が変更になったときにスクリプトを変更するのが面倒
- 非アクティブのオブジェクトを見つけることができない
あまり使わないほうが良いらしい。以前Find系メソッドを使った記事を公開したときに、指摘していただいた。
他のFindメソッドを知りたいなら
【Unity】Findメソッドの説明・使い方をお伝えする【オブジェクトを取得できる】もご覧いただきたい。単にオブジェクト名を入力してオブジェクトを検索するだけでなく、タグ名を指定してオブジェクトを検索する方法も書いている。
Inspectorウィンドウで操作できるようにしてオブジェクトを取得する
- publicを使う
- [SerializeField]を使う
メリット・デメリットの詳細は他記事にするので、少しお待ちください。
publicを使う
スクリプト例
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Sample : MonoBehaviour
{
public GameObject objGet;
}
public GameObject 変数名; | publicで宣言 |
このようにpublicで宣言することでInspectorウィンドウでオブジェクトを代入できる。
Inspectorウィンドウ上でオブジェクトを代入
このようにInspectorウィンドウでオブジェクトを格納できる。objGet変数にはCubeオブジェクトが格納されていることになっている。
スクリプトがアタッチされているオブジェクトのみならず、他のオブジェクトも格納することもできる。
メリット
- オブジェクト名があとで変更になっても面倒でない
- Inspectorウィンドウで代入するオブジェクトをいつでも変更可能
- Findメソッドより軽い処理になる
- オブジェクトが非アクティブでも取得可能
デメリット
- メモリを多少使用する
[SerializeField]を使う
スクリプト例
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Sample : MonoBehaviour
{
[SerializeField]
private GameObject objGet;
}
[SerializeField] private GameObject objGet; |
[SerializeField]で宣言 |
このように[SerializeField]で宣言することでInspectorウィンドウでオブジェクトを代入できる。
privateをつけなくても良い。
Inspectorウィンドウ上でオブジェクトを代入
このようにInspectorウィンドウでオブジェクトを格納できる。objGet変数にはCubeオブジェクトが格納されていることになっている。
スクリプトがアタッチされているオブジェクトのみならず、他のオブジェクトも格納することもできる。
メリット
- オブジェクト名前があとで変更になっても面倒でない
- Inspectorウィンドウで代入するオブジェクトをいつでも変更可能
- Findメソッドより軽い処理になる
- オブジェクトが非アクティブでも取得可能
デメリット
- メモリを多少使用する
まとめ
- Find系のメソッドを使う
- Inspectorウィンドウで操作できるようにしてオブジェクトを取得
以上がUnityでオブジェクトを見つける(取得する)方法だ。
このようなチュートリアルを販売しているので、Unityでゲームを作成している人は購入していただきたい。
コメント