コンポーネントの取得
CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 30/67。
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の範囲で指定して、ほかの色を作成できます。
チャレンジ
中級信号灯は赤で始まります。クリックするたびに、赤、黄、緑、再び赤の順に次の色へ切り替わります。
Start()で一度だけRendererを取得し、フィールドに保持します。Color.red、Color.yellow、Color.greenを使います。
Playを押し、ゲームを数回クリックしてから、Checkを押します。
自分で試してみよう
using UnityEngine;
public class SignalLight : MonoBehaviour
{
void Start()
{
}
void Update()
{
// クリックするたびに:赤、次に黄、次に緑、そして再び赤
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。