3 回答

TA貢獻1824條經驗 獲得超8個贊
如果您想要基于物理的跳躍,請不要使用 MovePosition。MovePosition 只會根據您的插值設置將剛體移動到某個位置。由于您的插值沒有,您會得到“非常滯后的運動”。
相反,您應該使用沖力。在您只嘗試加速力之前。此外,您的水平運動也必須相應地改變以增加力量。像這樣嘗試:
void Jump()
{
rb.AddForce(Vector2.up*jumpVelocity, ForceMode2D.Impulse);
}
要對此進行測試,您應該暫時禁用水平移動?;蛘吣憧梢赃@樣做:
private void Update()
{
float horizontal = Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;
rb.AddForce(horizontal * Vector2.right);
}
還有幾件事:
-從不檢查 FixedUpdate 循環內的輸入!您的游戲可能以 100 fps 運行,并且取決于固定更新(之所以稱為 fix,是因為 unity 試圖保持物理更新幀率固定),您可能會錯過按下按鈕的機會。
- 如果您使用 MovePosition,請僅在 FixedUpdate 中使用它。
-你可能想改變你檢查跳躍輸入的方式,你也可能想檢查玩家是否接地。
-您還應注意,還應避免在更新中使用 AddForce 作為加速力。

TA貢獻1884條經驗 獲得超4個贊
首先,您需要調用Rigidbodyfrom的方法,FixedUpdate因為那是計算物理的地方。其次將您的向量值乘以Time.fixedDeltaTime.
例子:
void FixedUpdate()
{
rb.MovePosition(rb.position + position * Time.fixedDeltaTime);
}

TA貢獻2012條經驗 獲得超12個贊
我有這個問題。就好像這個角色在傳送而不是慢慢上升。
我通過更改代碼解決了它。
我使用了這段代碼: MainBodyRigidBody.velocity = new Vector3 (Delta_X, 0, Delta_Y) * MovementSpeed * Time.deltaTime;
但我應該使用MainBodyRigidBody.velocity +=
我將我的代碼更改為:
MainBodyRigidBody.velocity += new Vector3 (Delta_X, 0, Delta_Y) * MovementSpeed * Time.deltaTime;
我為我的角色運動使用了上面的代碼,但它導致了我的問題。
- 3 回答
- 0 關注
- 145 瀏覽
添加回答
舉報