首页 > 解决方案 > 统一从游戏对象访问组件

问题描述

目前我正在学习Unity并且有点困惑。当我的导师想要访问另一个类的方法时(例如一个敌人想要在碰撞时访问玩家方法),他写了这样的东西: other.transform.GetComponents<Player>().Damage();

我的问题是:

  1. 为什么他必须使用other.transform,他不能只使用吗 ?other.GetComponents<Player>().Damage();

  2. Transform 和 GameObject 有什么区别?

标签: c#unity3d

解决方案


只要other是GameObject,你就对了,这两个函数调用本质上是等价的。

GameObject是表示 Unity 世界中存在的事物的基本实体所有游戏对象都有一个变换。GameObjects 还可以通过附加组件(例如自定义脚本、渲染器、网格、碰撞器等)拥有与它们相关联的其他数据和行为。

变换是一种特殊类型的组件,它描述了游戏对象在世界中的位置、旋转、缩放,还提供了操作此信息的方法。

可能由于遗留原因(此时 Unity 已经存在了十多年),Transform 类上仍有一些函数作用于其所有者 GameObject,例如GetComponents在您的示例中。


推荐阅读