UnityにはGameObject
やComponent
という要素が存在します
GameObject
は機能を持たない部品の側です、これにComponent
を追加することで様々な機能をもつことができます
Component
の例を以下に示します (https://www.f-sp.com/entry/2015/11/20/160005 より引用)
カメラ(Camera) ...
ライト(Light) ...
レンダラ(Renderer) ...
コライダ(Collider) ...
リジッドボディ(Rigidbody) ...
ジョイント(Joint) ...
キャンバス(Canvas) ...
テキスト(Text), イメージ(Image), ボタン(Button), etc.
UnityのスクリプトにはこのようなComponent
を取得する関数が存在し、Component
自体の制御を行う仕組みが用意されています。
本記事では、このComponent
へのアクセスを行うための関数について整理していきたいと思います。
調査したり使う場面が合った場合に随時追記していく
GameObject.GetComponent
公式リファレンス
定義型
public Component GetComponent (Type type);
サンプル
using UnityEngine;
public class GetComponentGenericExample : MonoBehaviour
{
void Start()
{
HingeJoint hinge = gameObject.GetComponent<HingeJoint>();
if (hinge != null)
hinge.useSpring = false;
}
}
サンプル2
(https://yttm-work.jp/unity/unity_0012.html より)
Scriptを取り付けたゲームオブジェクトにMeshRenderer
コンポーネントがある時にそれを取得するコード
MeshRender
はCube
にもデフォルトでついていおり、色を表現してくれます
// ゲームオブジェクトに格納されているMeshRendererを取得
MeshRenderer mesh = GetComponent<MeshRenderer>();
// MeshRendererのメンバであるマテリアルの色を変更
if (Input.GetKeyDown (KeyCode.Z) == true) {
mesh.materials[0].color = Color.blue;
} else if (Input.GetKeyDown (KeyCode.X) == true) {
mesh.materials[0].color = Color.red;
}
文字の画面表示
TextMehsPro
GameObject
> UI
> TextMeshPro
から文字表示用のゲームオブジェクトをUnityの画面に生成する.
生成後,Hierarchy
のCanvas
内にText(TMP)
というオブジェクトが生成される.
以下のようにスクリプトを作製し,text_object内に上記Text(TMP)
オブジェクトを設置する.
スクリプトはそのオブジェクト内のTextMeshProUGUI
コンポーネント取得し,Update関数内でtext要素にhelloという文字列をいれる.そうすると表示される文字列がhelloに変化する.
using TMPro;
public class AAA : MonoBehaviour
{
public GameObject text_object;
TextMeshProUGUI text_component;
void Start()
{
text_component = text_object.GetComponent<TextMeshProUGUI>();
}
void Update()
{
text_component.text = "hello";
}
}