球在unity2D比赛中减速

时间:2017-08-17 14:36:55

标签: c# unity3d unity5 unity2d

我有一个使用C#编码的封锁破坏者类型游戏,主要工作正常,但在游戏测试中,我发现在某些情况下球会慢下来!即如果它楔入游戏对象砖之间,球的力量会迅速减慢! 10次​​中有8次这种情况不会发生,但有时则会发生,我不确定为什么!我将发布Ball脚本,我认为你需要帮助解决这个问题,但是如果你需要更多信息,那么请问。

public class Ball : MonoBehaviour {

private Paddle paddle;

private bool hasStarted = false;

private Vector3 paddleToBallVector;

void Start () {
    paddle = GameObject.FindObjectOfType<Paddle> ();
    paddleToBallVector = this.transform.position - paddle.transform.position;
}

// Update is called once per frame
void Update () {
    if (!hasStarted) {
        //lock ball relative to the paddle
        this.transform.position = paddle.transform.position + paddleToBallVector;
        //wait for mouse press to start

        if (Input.GetMouseButtonDown (0)) {
        //if (Input.GetTouch(0).phase == TouchPhase.Ended){
        hasStarted = true;
            this.GetComponent<Rigidbody2D> ().velocity = new Vector2 (2f, 10f);
        }
    }
}

void OnCollisionEnter2D(Collision2D collision){

    Vector2 tweak = new Vector2 (Random.Range(0f,0.2f),Random.Range(0f,0.2f));

    if (hasStarted) {
        GetComponent<AudioSource> ().Play ();
        GetComponent<Rigidbody2D>().velocity += tweak;
    }
}

}

1 个答案:

答案 0 :(得分:2)

您正在直接添加球的速度。速度变量定义了方向和速度,而不仅仅是你想到的速度。

因此,当球与一个块碰撞时,它的速度为(+ x,+ y)。碰撞和弹跳后的速度为(+ x,-y)。因此,当它具有-y速度时,通过向速度添加随机正值意味着它将减慢球的速度。

这不会每次都发生,因为你在Update()方法中移动球。将其更改为“FixedUpdated()”。 Fixed Update处理所有物理计算。

另外,我建议你在Ball对象上使用RigidBody2D。移动物理对象应始终具有RigidBodies。有了这个,你可以在球的前进方向使用AddForce,这可以解决你的问题。

编辑:我看到你已经有了RigidBody2D。我第一次错过了。而不是GetComponent<RigidBody2D>().velocity尝试GetComponent<RigidBody2D>().AddForce( transform.forward * impulseAmount, ForceMode.Impluse );