移动一个物体有两种方式:
- 可以施加一个力或者冲量到这个物体上。力会随着时间慢慢修改物体的速度,而冲量会立即修改物体的速度。可使用以下方法
// 施加一个力到刚体上指定的点,这个点是世界坐标系下的一个点
rigidbody.applyForce(force, point);
// 或者直接施加力到刚体的质心上
rigidbody.applyForceToCenter(force);
// 施加一个冲量到刚体上指定的点,这个点是世界坐标系下的一个点
rigidbody.applyLinearImpulse(impulse, point);
以下为applyLinearImpulse
方法的的impulse
参数解释
以下为applyForce
方法的的force
参数解释
- 直接修改物体的位置,只是这看起来不像真实的物理,你应该尽量去使用力或者冲量来移动刚体,这会减少可能带来的奇怪问题。
了解以上方法后,需要获取到刚体在世界坐标系下的一个点来进行对应的力,
获取刚体对应的点的世界坐标
本地坐标系也叫节点坐标系,世界坐标系是相对于整体而言的,而本地坐标系是相对于父节点而言的
rigidbody = this.getComponent(RigidBody2D)
let wp = new Vec2()
// 获取目标本地坐标系下的世界坐标值,第一个参数v2(0, 0)表示刚体本地坐标,wp为对应的世界坐标
this.rigidbody.getWorldPoint(v2(0, 0), wp)
// 也可用以下方法直接获取刚体质心的世界坐标
// this.rigidbody.getWorldCenter(wp)
获取节点对应的世界坐标点后,再执行对应的力或冲量,让我们来对刚体进行一个垂直向上的力,来实现角色跳跃的功能,因为角色本身具有横行移动速度,所以force
向量的x
轴的力我们设置为0,只需要一个y
轴垂直向上的力即可。在x = 0
的情况下,只要y > 0
即为90度垂直向上的力
// 施加一个力到刚体上指定的点,这个点是世界坐标系下的一个点,force为力的向量,v2(0, this.jumpHeight)这个设置表示垂直向上的冲力
let force = v2(0, 100)
rigidbody.applyForce(force, wp, false)
// 施加一个冲量到刚体上指定的点,这个点是世界坐标系下的一个点
// rigidbody.applyLinearImpulse(force, wp, false)