![](/img/trans.png)
[英]Unity RigidBody2D.AddForce() method stopped player movement, stuck without move
[英]Unity C# Player going too fast with Rigidbody2D.AddForce
所以我正在嘗試在Unity 5 中制作游戲。 這是一個2D 游戲,我希望我的角色自動前進。 但我的問題是,由於我使用Rigidbody2D.AddForce ,它會不斷增加每一幀的力,我不想要那樣。 我希望我的速度為5.0f ,而不是更多或更少。 有沒有辦法設置限制或保持恆定速度?
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour {
public Rigidbody2D player;
public bool grounded = false;
private bool hasJumped = false;
public float movementspeed = 5.0f;
public float jumpforce = 450.0f;
// Use this for initialization
void Start () {
player = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update () {
player.AddForce(transform.right * movementspeed);
// (JumpScript)
}
void FixedUpdate(){
// (JumpScript)
}
}
我對這里的答案感到非常驚訝,它們離我們很遠。 你的問題是你在更新中添加了力量,每幀都被調用。 這意味着游戲的每一幀對象都會獲得 5 倍以上的力並無限加速。
如果您希望對象獲得 5 個力,然后保持該速度,只需在開始時添加力而不是更新。 像這樣:
// Use this for initialization
void Start () {
player = GetComponent<Rigidbody2D>();
player.AddForce(transform.right * movementspeed);
}
// Update is called once per frame
void Update () {
// (JumpScript)
}
您可以將 Rigidbody.velocity 設置為 5。
但是,遲早知道一些物理學會非常有用。 絕對最低限度是了解牛頓定律。
在您的情況下,如果您絕對致力於使用AddForce()
您可以使用ForceMode.Impulse
作為第三個參數,為您的對象提供即時推動(而不是逐漸加速)。 這樣你就只需要調用AddForce()
一次,而不是重復調用。 您可以通過動能公式計算出您需要的確切力量:
力 = 0.5f * 質量 * 速度^2
我也在寫一個像你一樣的 2D 游戲。 我使用if
來檢查速度並使用另一個變量來表示這樣的力:
public float acel = 50, speed = 5;
Rigidbody2D rbody;
void FixedUpdate () {
// As you want to move right, we don't have to calculate the absolute value
if (rbody.velocity.x < speed)
rbody.AddForce(Vector2.right*acel);
}
速度並不總是 5,但也許這並不重要。
如果您想使用 Physics 以恆定速度移動您的播放器,那么您需要在開始時施加力,直到達到您想要的速度,然后才將力更改為 0。為了使其按預期工作,我還要添加為角色的碰撞器添加物理材質,以確保沒有摩擦減慢角色的速度。
PS:如果您正在創建某種無限跑酷游戲,我會考慮移動和重用環境而不是玩家。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.