繁体   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