コンポーネントの追加
CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 46/85。
gameObject.AddComponent<T>() は、ゲームの実行中にオブジェクトに型 T の新しいコンポーネントを追加し、次の行で設定できるようにそのコンポーネントを返します。コンポーネントは GameObject に属しており、スクリプトは gameObject を通じて GameObject にアクセスします。このキャンプファイアは、ゲームの開始時に自分自身を暖かなオレンジ色の光で照らします。
void Start()
{
Light glow = gameObject.AddComponent<Light>();
glow.color = new Color(1f, 0.5f, 0f);
glow.intensity = 2f;
}この方法で追加したコンポーネントは、ゲームの実行中は存在し続けます。「プレイ」を停止すると、オブジェクトはシーンに保存された状態に戻り、Light はなくなります。自分で作成したスクリプトもコンポーネントです。gameObject.AddComponent<Spinner>() を使うと、ほかのスクリプトと同じように実行を開始する Spinner が追加されます。
ほとんどのコンポーネントは複数回追加できますが、できないものもあります。オブジェクトが持てる Rigidbody は最大1つで、2つ目を追加しようとすると、代わりに Console に警告 Can't add component 'Rigidbody' が表示されます。複数回実行される可能性があるコードでは、追加する前にオブジェクトがすでにそのコンポーネントを持っているかどうかを確認します。
チャレンジ
中級Spaceキーを押すとヤシの木が揺れ、ココナッツが落ちます。
Update()内で、Input.GetKeyDown(KeyCode.Space)のときに、gameObject.AddComponent<Rigidbody>()でRigidbodyを追加します。- ココナッツにまだRigidbodyがない場合のみ追加します:
!TryGetComponent(out Rigidbody rb)。2回目のSpaceキーでは、Rigidbodyは追加されません。
「プレイ」を押してからSpaceキーを押すと、ココナッツが砂の上に落ちます。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class CoconutDrop : MonoBehaviour
{
void Update()
{
// Space: ココナッツにまだRigidbodyがなければ追加する
}
}
Unityスクリプトの基礎のすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド