变换
可参考的官方例子:parenting
,关于创建 2D 或 3D 物体的东西。
如果你是游戏开发的新手,首先可以简单定义一下:
通过 Transform
你可在游戏的任意位置放置对象,并对它进行 "平移"(位置/坐标)、"旋转" 和 "缩放"(大小调整)等变换操作。
你通过修改 translation
来移动物体,通过修改 rotation
来旋转物体,通过修改 scale
来使物体变大或变小。
变换组件 Transform Components
在 Bevy 中,变换由 两个 组件表示。Transform
和 GlobalTransform
。任何在游戏世界中代表一个对象的实体都需要有这两个组件。
你经常需要用到 Transform
,它是一个包含平移、旋转和缩放的 struct
。要读取或操作这些值,可以在你的 systems 函数中使用 query 来访问它们。
如果实体有一个 父对象,Transform
组件是相对于父对象的,这意味着子对象将与父对象一起移动、旋转和缩放。
GlobalTransform
表示在游戏世界里的绝对全局位置。如果该实体没有一个父对象,那么它的值将与 Transform
相同。GlobalTransform
的值是由 Bevy 在内部进行计算和管理的,你应该把它当作只读的,不要改变它。
请注意:这两个组件的值是由 Bevy 内部的系统("变换传递系统")在 PostUpdate
阶段执行同步的,如果你想做一些依赖于实体的相对局部、绝对全局位置的高级变换操作,这会有些微妙,并可能导致你掉进棘手的陷阱。当你改变 Transform
时,GlobalTransform
不会被立即更新,它们两的值在 "变换传递系统" 执行前都将是不同步的。