c# - 统一从游戏对象访问组件
问题描述
目前我正在学习Unity并且有点困惑。当我的导师想要访问另一个类的方法时(例如一个敌人想要在碰撞时访问玩家方法),他写了这样的东西: other.transform.GetComponents<Player>().Damage();
我的问题是:
为什么他必须使用
other.transform
,他不能只使用吗 ?other.GetComponents<Player>().Damage();
Transform 和 GameObject 有什么区别?
解决方案
只要other
是GameObject,你就对了,这两个函数调用本质上是等价的。
GameObject是表示 Unity 世界中存在的事物的基本实体。所有游戏对象都有一个变换。GameObjects 还可以通过附加组件(例如自定义脚本、渲染器、网格、碰撞器等)拥有与它们相关联的其他数据和行为。
变换是一种特殊类型的组件,它描述了游戏对象在世界中的位置、旋转、缩放,还提供了操作此信息的方法。
可能由于遗留原因(此时 Unity 已经存在了十多年),Transform 类上仍有一些函数作用于其所有者 GameObject,例如GetComponents
在您的示例中。
推荐阅读
- java - 从 Java 代码访问对象类的 const 字段时为什么会出错
- python-3.x - 带有依赖项的python docker文件
- javascript - listMonth FullCalendar 视图:长事件的拆分持续时间
- sql - ssrs 2015 中的 SQL 值在 INT32 中太大或太小
- python - Python将数组插入字符串
- javascript - 级联 jQuery 图像回退
- angular - Angular 6 和 Angular 材料打印一个 div 返回空字段,没有数据,也没有附加 css
- angularjs - 从自定义指令设置元素 html 时,data-ng-click 不起作用
- python - Pandas:使用循环合并数据帧 - MemoryError
- python - 不清楚 blit_into() 错误