如何控制弹跳球的前进方向

时间:2019-04-05 10:23:50

标签: c# unity3d

我想做一个弹跳球比赛,我必须控制(连续弹跳)球行进的方向。问题是,通过加力,球会越来越快地移动,我试图进一步控制它,因为刚体上的摩擦力必须为零,并且我正在使用Rigidbody()。AddForce()。如何在不增加力量的情况下移动它? 如何使弹跳球向想要的方向弹跳(移动)? 我不想使用动画,该游戏将基于各种物理事件。

这是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour{
public Color[] colors;
private Renderer renderer;

private void Awake(){
    renderer = this.GetComponent<Renderer>();

    InvokeRepeating("ChangeColor", 0, 3f);
}

private void FixedUpdate()
{
    MoveBall();
}

void ChangeColor(){
    renderer.material.color = colors[Random.Range(0, colors.Length)];
}
void MoveBall(){
    Debug.Log(GetComponent<Rigidbody>().velocity.magnitude);

        if (Input.GetKey("w"))
        {
            GetComponent<Rigidbody>().AddForce(new Vector3(0, 0, 1) * (30f - (GetComponent<Rigidbody>().velocity.magnitude*9)));
        }
        if (Input.GetKey("s"))
        {
            GetComponent<Rigidbody>().AddForce(new Vector3(0, 0, -1) * (30f - (GetComponent<Rigidbody>().velocity.magnitude*9)));
        }
        if (Input.GetKey("a"))
        {
            GetComponent<Rigidbody>().AddForce(new Vector3(-1, 0, 0) * (30f - (GetComponent<Rigidbody>().velocity.magnitude*9)));
        }
        if (Input.GetKey("d"))
        {
            GetComponent<Rigidbody>().AddForce(new Vector3(1, 0, 0) * (30f - (GetComponent<Rigidbody>().velocity.magnitude*9)));
        }

}

}

1 个答案:

答案 0 :(得分:1)

您可以设置速度限制,以使其不会超过所需的最大速度:

rigidbody.velocity = Vector3.ClampMagnitude(rigidbody.velocity, maxSpeed);

或者,如果它没有破坏所需的物理方法,则可以直接修改对象的速度,并使用以下方法消除任何加速度:

rigidbody.velocity = new Vector3();