ゲーム開発に使える素材・知識

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

Unityでオブジェクトを取得する方法

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メソッドの説明・使い方をお伝えする
【Unity】Findメソッドの説明・使い方をお伝えする【オブジェクトを取得できる】【Unity】Findメソッドの説明と使い方をお伝えする。まず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サンプルゲーム】うちのポチが危ないところでフリスビーを要求する理由を教えてくれの本記事
【Unity3Dサンプルゲーム・チュートリアル】「フリスビーを犬に届けよ!」の概要【Unityチュートリアル・サンプルゲーム】Unityで3Dゲームを作りたいと考えている人、本やネットにあるUnityのチュートリアルをやってみたけど、いまいちゲームらしくないと思っている人、テキストでも動画でも学びたい人におすすめのチュートリアルです。...
ABOUT ME
さぎのみや
さぎのみや
超書手。現在はUnityメディア「ユニシャー」の運営とゲーム開発がメインです。Unity、ライティング関係のお仕事お待ちしております。 >>詳しいプロフィール >>Amazonほしいものリスト
【Unity3D】新しいサンプルゲーム(チュートリアル)を作りました!!!
Unity有料サンプルゲーム

「Unityで3Dゲームを本格的に作っていきたい!」という人におすすめのチュートリアルとなっています。

画像のようなゲームの作り方を販売しています。色々と応用できるチュートリアルとなっています。ぜひ、作ってみてください。

詳細
>>【Unity3Dサンプルゲーム・チュートリアル】「フリスビーを犬に届けよ!」の概要

>>noteでこのチュートリアルを見る

【RT・フォローであなたのスキルが上がる】

シェアフォローする

さぎのみやのモチベが上がる

コンテンツの質が上がる

あなたの能力も上がる

あなたの
Twitterでのシェア

であなたの能力が上がります。

>>さぎのみやのツイッター(@saginomiya8)

 

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


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