团结球以恒定速度

时间:2015-12-23 15:21:56

标签: unity3d

我正在制作2D手机游戏而且我有一个球,但我的球并没有恒定的移动速度。我需要做什么? 当我在我的Android设备上构建游戏时,球有各种速度。在那种情况下,我的游戏无法播放。

我希望有人可以帮助我。感谢。

这是我的开始功能:

void Start () {
    GetComponent<Rigidbody2D> ()
        .AddForce (new Vector2 (1f, 0.5f)* Time.deltaTime * force);
}

如果我在代码中使用它是一个好习惯吗? Application.LoadLevel(&#34; __ Scena_0&#34;); &#34;当我失去时加载现有场景&#34;寿命&#34; ?当我输了#34;生活&#34;并尝试以第二次机会玩游戏。

当我的球击中触发对象时,我的更新功能是关于OnTriggerEnter2D。

编辑于2015年12月23日。 :问题通过添加物理材料(小说0)并添加到脚本来解决:

using UnityEngine.SceneManagement;
...
SceneManager.LoadScene ("MainScene");

3 个答案:

答案 0 :(得分:1)

创建一个新的Physics Material,设置摩擦零并将其添加到您的对象。如果你的物体没有摩擦力,它的速度就不会降低。然后,在Rigidbody2D上使用AddForce()来加速。

答案 1 :(得分:1)

问题是力矢量的计算:

new Vector2 (1f, 0.5f) * Time.deltaTime * force

您正在使用Time.deltaTime作为因子,这意味着所施加的力不是常数,而是取决于deltaTime,即最后一帧的持续时间。这解释了为什么它会随机变化。

我不认为Time.deltaTime就是你想要的,试着去除因素并调整&#34; force&#34;相应的因素。你现在应该施加一个恒定的力量,独立于你所使用的平台。

答案 2 :(得分:0)

假设您的球和碰撞墙有弹性材料,没有摩擦力。尝试

public float _ballSpeed = 2.5f;
Rigidbody2D _rb;

void Start()
{
    _rb = GetComponent<Rigidbody2D>();
    _rb.velocity = Vector2.one * _ballSpeed;
}
void Update()
{

}

通过_ballSpeed

可以控制球速
//========== OR ==========//

如果你想在球破坏后保持速度。

在任何全局静态变量中保留_ballSpeed。

假设您有一个名为Globals的类,声明一个类似

的变量
public class Globals
{
    public static float BALL_SPEED = 2.5f;
}

现在在Ball Script

Rigidbody2D _rb;

void Start()
{
    _rb = GetComponent<Rigidbody2D>();
    _rb.velocity = Vector2.one * Globals.BALL_SPEED;
}
void Update()
{

}