【Unity】オブジェクトを見つける(取得する)2つの方法

Unityでオブジェクトを見つける(取得する)する方法をお伝えする。ゆっくり読んでいただきたい。

目次

現在の状況

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メソッドの説明・使い方をお伝えする【オブジェクトを取得できる】もご覧いただきたい。単にオブジェクト名を入力してオブジェクトを検索するだけでなく、タグ名を指定してオブジェクトを検索する方法も書いている。

あわせて読みたい
【Unity】Findメソッドの説明・使い方をお伝えする【オブジェクトを取得できる】 Findメソッドの説明・使い方の記事になっている。「GameObject.Find」から「transform.Find」の説明まで行っている。 GameObject.FindとTransform.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ウィンドウ上でオブジェクトを代入

[public]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ウィンドウ上でオブジェクトを代入

[SerializeField]Inspectorウィンドウでオブジェクトを代入

このようにInspectorウィンドウでオブジェクトを格納できる。objGet変数にはCubeオブジェクトが格納されていることになっている。

スクリプトがアタッチされているオブジェクトのみならず、他のオブジェクトも格納することもできる。

メリット

  • オブジェクト名前があとで変更になっても面倒でない
  • Inspectorウィンドウで代入するオブジェクトをいつでも変更可能
  • Findメソッドより軽い処理になる
  • オブジェクトが非アクティブでも取得可能

 

デメリット

  • メモリを多少使用する

 

まとめ

  • Find系のメソッドを使う
  • Inspectorウィンドウで操作できるようにしてオブジェクトを取得

以上がUnityでオブジェクトを見つける(取得する)方法だ。

このようなチュートリアルを販売しているので、Unityでゲームを作成している人は購入していただきたい。

>>Unityでもっとゲーム開発する

あわせて読みたい
【Unity3Dサンプルゲーム・チュートリアル】「フリスビーを犬に届けよ!」の概要 はじめに Unityでのゲーム開発を手助けするメディア「Unishar-ユニシャー」のさぎのみやです。「フリスビーを犬に届けよ!」というゲームのチュートリアルを作成しまし...
Unityでオブジェクトを取得する方法

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次