移動一個物體有兩種方式:
- 可以施加一個力或者沖量到這個物體上。力會隨著時間慢慢修改物體的速度,而沖量會立即修改物體的速度。可使用以下方法
// 施加一個力到剛體上指定的點,這個點是世界坐標系下的一個點
rigidbody.applyForce(force, point);
// 或者直接施加力到剛體的質心上
rigidbody.applyForceToCenter(force);
// 施加一個沖量到剛體上指定的點,這個點是世界坐標系下的一個點
rigidbody.applyLinearImpulse(impulse, point);
以下為applyLinearImpulse
方法的的impulse
參數解釋
image.png
以下為applyForce
方法的的force
參數解釋
image.png
- 直接修改物體的位置,只是這看起來不像真實的物理,你應該盡量去使用力或者沖量來移動剛體,這會減少可能帶來的奇怪問題。
了解以上方法后,需要獲取到剛體在世界坐標系下的一個點來進行對應的力,
獲取剛體對應的點的世界坐標
本地坐標系也叫節點坐標系,世界坐標系是相對于整體而言的,而本地坐標系是相對于父節點而言的
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)