コンポーネントの追加
CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 32/67。
gameObject.AddComponent<T>()は、ゲームの実行中にオブジェクトへ型Tの新しいコンポーネントを追加し、次の行で設定できるようにそのコンポーネントを返します。これはGameObjectに属しており、スクリプトからはgameObjectを介してアクセスします。このキャンプファイアは、ゲームが開始すると暖かなオレンジ色の光を放ちます。
void Start()
{
Light glow = gameObject.AddComponent<Light>();
glow.color = new Color(1f, 0.5f, 0f);
glow.intensity = 2f;
}この方法で追加したコンポーネントは、ゲームの実行中は存在し続けます。Playを停止すると、オブジェクトはシーンに保存された状態に戻り、Lightもなくなります。自作のスクリプトもコンポーネントです。gameObject.AddComponent<Spinner>()を使うと、ほかのスクリプトと同じように実行を開始するSpinnerを追加できます。
ほとんどのコンポーネントは複数回追加できますが、そうでないものもあります。オブジェクトが保持できるRigidbodyは最大1つで、2つ目を要求すると、代わりにConsoleにエラーが表示されます。複数回実行される可能性のあるコードでは、追加する前にオブジェクトがすでにそのコンポーネントを持っているかどうかを確認します。
チャレンジ
中級ココナッツはヤシの木にぶら下がっています。Spaceキーを押すと木が揺れ、ココナッツにRigidbodyが追加されるので、重力によって砂の上に落ちます。
- 最初にSpaceキーを押すまでは、ココナッツはぶら下がったままです。
- ココナッツにRigidbodyがまだない場合に限り、Spaceキーを押すと追加されます。そのため、後から押しても何も起こりません。
Playを押し、Spaceキーを押してから、Checkを押してください。
自分で試してみよう
using UnityEngine;
public class CoconutDrop : MonoBehaviour
{
void Update()
{
// Space: ココナッツにまだ Rigidbody がなければ追加する
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。