他のGameObjectのComponentにアクセスする

Pocket

シーン内にあるGameObjectにアクセスする方法について記載します。

色々な手法で出来るのでどの手法でやるか考える必要があります。

では、まず最初にスクリプト内で他のゲームオブジェクトをアサインさせる方法についてです。

Findを使ってGameObjectをアサインする

using UnityEngine;
using System.Collections;

public class GameManager : MonoBehaviour
{

    public GameObject playerObject01;
    public GameObject playerObject02;

    void Awake()
    {
        // ゲームオブジェクト名でシーン内を検索
        playerObject01 = GameObject.Find("Player");

        // タグ名でシーン内を検索
        playerObject02 = GameObject.FindGameObjectsWithTag("Player");
    }
}

参考書でも記載されていてプログラム上で完結し、割と簡単に取得できるが、
オブジェクト名が変わった際にプログラムの修正が必要なことと
パフォーマンスが悪い。特にシーン内のオブジェクトの数が多くなるとどんどんパフォーマンスが悪くなる。
他のブログでも頻繁に使用しないことを推奨しているところが多いです。

Inspector Viewを使ってアサインする

using UnityEngine;
using System.Collections;

public class SampleHoge : MonoBehaviour {

	public GameObject sampleFuga;

}

publicでGameObjectを宣言することでInspector Viewに表示されるので、
アサインしたいGameObjectを設定(ドラッグ&ドロップでも可能)する。

スクリーンショット 2015-09-13 10.32.27

Findに比べてパフォーマンスは良い。
プログラムとInspectorで管理するので数が多いと面倒くさい。


上記の方法でゲームオブジェクトをアサイン出来たので次は
アサインしたゲームオブジェクトのComponentにアクセスる方法について記載いたします。
※サンプルではInspector Viewで設定していると想定して進めます。

SendMessageを使ってアクセス

using UnityEngine;
using System.Collections;

public class SampleHoge : MonoBehaviour {

	public GameObject sampleFuga;

	void Start()
	{
		sampleFuga.SendMessage("SampleMethod");
	}

}
using UnityEngine;
using System.Collections;

public class SampleFuga : MonoBehaviour {

	private void SampleMethod()
	{
		Debug.Log("SampleFugaのメソッド");
	}

}

上記のサンプルではゲームオブジェクトのSampleHogeからゲームオブジェクトのSampleFugaのコンポーネント(SampleFuga.cs)のsampleMethodを呼び出しています。
気づいている方もいるかと思いますが、SendMessageではprivateメソッドも呼び出すことが可能です。
また、SendMessageでは戻り値は取得できないので、あくまで呼び出すだけになります。
SendMessageもパフォーマンスが悪いということであまり推奨していないようです。

GetComponentを使ってアクセス

using UnityEngine;
using System.Collections;

public class SampleHoge : MonoBehaviour {

	public GameObject sampleFuga;

	void Start()
	{
		// <SampleFuga>はスクリプト名を記載
		sampleFuga.GetComponent<SampleFuga>().sampleMethod();
	}

}
using UnityEngine;
using System.Collections;

public class SampleFuga : MonoBehaviour {

	public void sampleMethod()
	{
		Debug.Log("SampleFugaのメソッド");
	}

}

スクリプト以外にもRegidbody等の値も取得できます。
また、SendMessage違い戻り値も取得することができます。

ということで今日はここまで。



Post Footer automatically generated by Add Post Footer Plugin for wordpress.

びのっち

関東圏で活動しているとてもマイペースなSEです。

コメントを残す

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

*