变换

可参考的官方例子:parenting,关于创建 2D 或 3D 物体的东西。


如果你是游戏开发的新手,首先可以简单定义一下:

通过 Transform 你可在游戏的任意位置放置对象,并对它进行 "平移"(位置/坐标)、"旋转" 和 "缩放"(大小调整)等变换操作。

你通过修改 translation 来移动物体,通过修改 rotation 来旋转物体,通过修改 scale 来使物体变大或变小。

变换组件 Transform Components

在 Bevy 中,变换由 两个 组件表示。TransformGlobalTransform。任何在游戏世界中代表一个对象的实体都需要有这两个组件。

你经常需要用到 Transform,它是一个包含平移、旋转和缩放的 struct。要读取或操作这些值,可以在你的 systems 函数中使用 query 来访问它们。

如果实体有一个 父对象Transform 组件是相对于父对象的,这意味着子对象将与父对象一起移动、旋转和缩放。

GlobalTransform 表示在游戏世界里的绝对全局位置。如果该实体没有一个父对象,那么它的值将与 Transform 相同。GlobalTransform 的值是由 Bevy 在内部进行计算和管理的,你应该把它当作只读的,不要改变它。

请注意:这两个组件的值是由 Bevy 内部的系统("变换传递系统")在 PostUpdate 阶段执行同步的,如果你想做一些依赖于实体的相对局部、绝对全局位置的高级变换操作,这会有些微妙,并可能导致你掉进棘手的陷阱。当你改变 Transform 时,GlobalTransform 不会被立即更新,它们两的值在 "变换传递系统" 执行前都将是不同步的。