Menu
CoddyTech

添加组件

本课属于 Coddy Unity 学习旅程的“Unity 脚本基础”单元。第 46 课,共 85 课。

gameObject.AddComponent<T>() 会在游戏运行时向对象添加一个 T 类型的新组件,并返回该组件,这样你就可以在接下来的几行中设置它。它属于 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,如果尝试再添加一个,Console 中会显示警告,而不是添加成功:Can't add component 'Rigidbody'。可能运行多次的代码会先检查对象是否已有该组件,再决定是否添加。

challenge icon

挑战

中等

按下空格键会摇动棕榈树,椰子就会掉下来。

  1. 在 Update() 中,当按下 Input.GetKeyDown(KeyCode.Space) 时,使用 gameObject.AddComponent<Rigidbody>() 添加 Rigidbody。
  2. 仅当椰子没有 Rigidbody 时才添加:!TryGetComponent(out Rigidbody rb)。再次按下空格键不会添加第二个 Rigidbody。

点击“开始”,然后按空格键:椰子会掉到沙地上。然后点击“检查”。

亲手试试

using UnityEngine;

public class CoconutDrop : MonoBehaviour
{
    void Update()
    {
        // Space:如果椰子还没有 Rigidbody,就给它添加一个
    }
}

Unity 脚本基础中的所有课

自己练习: Unity 在线编辑器