移动玩家
将玩家传送到场景中的新位置,或引导其步行到新位置
要更改场景中玩家的位置,请使用 movePlayerTo() 函数。可用它来重生玩家、设置检查点,或让玩家走到某个位置,作为过场动画的一部分。
此函数接受一个具有以下属性的对象:
newRelativePosition:玩家要放置的位置,以 Vector3 表示。cameraTarget:(可选)让摄像机朝向的方向,以 Vector3 表示,即要注视的空间中某个点的坐标。如果未提供值,摄像机将保持与移动前相同的旋转。avatarTarget:(可选)让虚拟形象朝向的方向,以 Vector3 表示,即要注视的空间中某个点的坐标。如果未提供值,虚拟形象将保持与移动前相同的旋转。如果玩家处于第一人称摄像机模式,摄像机和虚拟形象的旋转将相同。持续时间:(可选)过渡应持续的时间,以秒为单位。如果未提供值,过渡将立即发生。如果提供了持续时间,虚拟形象将走或跑到这个新位置。
import { movePlayerTo } from '~system/RestrictedActions'
// 创建实体
const myEntity = engine.addEntity()
MeshRenderer.setBox(myEntity)
MeshCollider.setBox(myEntity)
Transform.create(myEntity, {
position: { x: 4, y: 1, z: 4 },
})
// 给实体添加行为
pointerEventsSystem.onPointerDown(
{
entity: myEntity,
opts: { button: InputAction.IA_POINTER, hoverText: '点击' },
},
function () {
// 重生玩家
movePlayerTo({
newRelativePosition: Vector3.create(1, 0, 1),
cameraTarget: Vector3.create(8, 1, 8),
avatarTarget: Vector3.create(8, 1, 8),
})
}
)玩家的移动会立即发生,不会出现任何确认界面或摄像机过渡。
该 movePlayerTo() 函数是可等待的,因此如果移动有持续时间,你可以使用 await 来等待玩家到达目的地。
如果玩家在过渡持续期间尝试移动,则过渡将被中断,并且 movePlayerTo 函数将永远不会完成解析。你可以在过渡进行期间使用 InputModifier 组件来禁用所有输入,参见 限制移动.
最后更新于