コンポーネントの取得
CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 44/85。
GameObjectはコンポーネントの入れ物です。Transform、描画を行うMeshRenderer、コライダー、そしてスクリプトが入っています。GetComponent<Renderer>()は同じオブジェクト上にある、その型のコンポーネントを返します。それを通じて、スクリプトからそのコンポーネントの動作を変更できます。transformはTransformを取得するための、あらかじめ用意されたショートカットです。それ以外のコンポーネントは、自分で取得します。
このキューブはSpaceキーを押すと赤くなります。Start()でRendererを一度だけ取得して、フィールドに保持します。GetComponentは呼び出されるたびにオブジェクトのコンポーネントを検索しますが、取得するものは変わりません。
Renderer rend;
void Start()
{
rend = GetComponent<Renderer>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rend.material.color = Color.red;
}
}rend.materialを初めて使うと、このオブジェクト専用のマテリアルのコピーが作られるため、同じマテリアルを共有していた他のオブジェクトの色はそのままです。Unityには、Color.red、Color.green、Color.blue、Color.yellow、Color.grayなど、名前が付いた色がいくつか用意されています。new Color(r, g, b)を使えば、各要素を0から1までの値で指定して、ほかの色を作れます。
チャレンジ
中級クリックするたびに信号機の色が赤、黄、緑、そして再び赤へと変わります。
Renderer rend;フィールドを追加し、Start()内でGetComponent<Renderer>()を使って設定します。Input.GetMouseButtonDown(0)のとき、int stepフィールドに1を加え、3に達したら0に戻します。- stepが0、1、2のとき、それぞれ
rend.material.colorをColor.red、Color.yellow、Color.greenに設定します。
「プレイ」を押してゲームをクリックすると、ライトの色が変わります。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class SignalLight : MonoBehaviour
{
void Start()
{
}
void Update()
{
// クリックするたびに、赤、黄、緑、そして再び赤の順に切り替わる
}
}
Unityスクリプトの基礎のすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド