【Unity】コンポーネントからゲームオブジェクトの座標を取得する
コンポーネントを取得すると、その情報からコンポーネントをアタッチしているゲームオブジェクトの情報を取得することができます
位置情報は、ゲームオブジェクトのtransform.positionプロパティから取得するイメージですが、コンポーネントを使いたい場合、ついでにゲームオブジェクトの情報が得ることができるテクニックの紹介になります
今回は、座標の情報を取得してみます
サンプル構成
Cube
プレイヤーに見立てています
シーン
スクリプト
using UnityEngine;
public class PlayerStatus : MonoBehaviour
{
}
GameObject
何らかのマネージャに見立てています
シーン
インスペクター上で、CubeをPlayerStatusのところにドラッグ&ドロップします
スクリプト
using UnityEngine;
public class Test : MonoBehaviour
{
[SerializeField]
PlayerStatus playerStatus;
void Start()
{
Debug.Log($"プレイヤーの位置は、{playerStatus.transform.position}");
}
}
using UnityEngine;
public class Test : MonoBehaviour
{
void Start()
{
var position = GameObject.Find("Cube").GetComponent<PlayerStatus>().transform.position;
Debug.Log($"プレイヤーの位置は、{position}");
}
}
さらに考えると、
using UnityEngine;
public class Test : MonoBehaviour
{
void Start()
{
var position = GameObject.Find("Cube").transform.position;
Debug.Log($"プレイヤーの位置は、{position}");
}
}
でもいいのですが、この資料では、スクリプトの取得のついでにゲームオブジェクトの位置も取得できるとのケースにメリットを見出しています
実行結果
プレイヤーの位置は、(10.00, 0.00, 10.00)
解説
UnityEngineでの継承関係
Component ← Behaviour ← MonoBehaviour ← PlayerStatus
Componentクラスには、Transform型のプロパティ(getのみ)が宣言されています
プロパティ名は、transformになります
UnityEngine内のComponentクラス抜粋
public class Component : UnityEngine.Object
{
public extern Transform transform {
[MethodImpl (MethodImplOptions.InternalCall)]
[FreeFunction ("GetTransform", HasExplicitThis = true, ThrowsException = true)]
get;
}
}
内部では、このコンポーネントをアタッチしているゲームオブジェクトのTransformをGetComponentしているので、
playerStatus.transform.position
は、PlayerStatusスクリプト(コンポーネント)のゲームオブジェクトの座標が取得できることになります
ディスカッション
コメント一覧
まだ、コメントがありません