一、 获取对象※
在 Unity 中获取游戏对象有多种方式,以下是一些常用的获取游戏对象的方式:
1 使用名称获取
- 使用 GameObject.Find() 方法按照名称获取游戏对象。这个方法会在场景中查找并返回名称
匹配的第一个游戏对象。名称中可以添加上路径。
// 按照名称获取名为 "Cube" 的游戏对象
GameObject cube = GameObject.Find("Cube");
2 按标签获取
- 使用 GameObject.FindGameObjectsWithTag() 方法按照标签获取游戏对象。这个方法会返
回所有标记为指定标签的游戏对象数组。
// 获取所有标记为 "Enemy" 的游戏对象
GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
3 通过变量引用获取
- 在脚本中声明公共变量并在 Unity 编辑器中拖拽关联游戏对象到这些变量上,以便直接访问。
public GameObject player; // 在脚本中声明一个公共游戏对象变量
void Start()
{
// 在 Unity 编辑器中将 Player 游戏对象拖拽到 Player 变量上
player.GetComponent<PlayerController>().Move(); // 通过变量引用直接访问游戏对象及其组件
}
4 通过遍历获取
- 使用 GameObject.FindObjectsOfType<T>() 方法获取场景中所有指定类型的游戏对象数
组。
// 获取场景中所有类型为 Rigidbody 的游戏对象数组
Rigidbody[] rigidbodies = GameObject.FindObjectsOfType<Rigidbody>();
以上除了变量引用物体,其它方式都不支持隐藏物体的查找。如需获取隐藏物体,使用transform.find函数
二、组件获取※
在 Unity 中获取游戏对象的组件(Component)有多种方式,以下是一些常用的获取游戏组件的方式:
1 在同一对象上获取组件
- 使用 GetComponent<T>() 方法在同一游戏对象上获取指定类型的组件。
// 获取当前游戏对象上的 Rigidbody 组件
Rigidbody rb = GetComponent<Rigidbody>();
2 在其他对象上获取组件
- 使用 GetComponentInChildren<T>() 或 GetComponentInParent<T>() 方法在子对象或父对象中查找并获取指定类型的组件。
// 获取当前游戏对象的子对象中的脚本组件
MyScript myScript = GetComponentInChildren<MyScript>();
// 获取当前游戏对象的父对象中的碰撞体组件
Collider parentCollider = GetComponentInParent<Collider>();
3 通过变量引用获取
- 类似于获取游戏对象,你也可以在脚本中声明公共变量并在 Unity 编辑器中拖拽关联组件到这些变量上,以便直接访问。
public Rigidbody rb; // 在脚本中声明一个公共刚体变量
void Start()
{
rb.AddForce(Vector3.up * 10f); // 通过变量引用直接访问组件
}
4 通过GetComponent()方法获取
- 结合获取游戏对象方式,也可以在获得游戏对象的同时获取指定类型的组件。
// 获取名为 "Cube" 的游戏对象,并尝试获取 Rigidbody 组件
GameObject cube = GameObject.Find("Cube");
Rigidbody cubeRb = cube.GetComponent<Rigidbody>();