簡體   English   中英

Unity C# Player 使用 Rigidbody2D.AddForce 速度太快

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM