我想做一个弹跳球比赛,我必须控制(连续弹跳)球行进的方向。问题是,通过加力,球会越来越快地移动,我试图进一步控制它,因为刚体上的摩擦力必须为零,并且我正在使用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)));
}
}
}
答案 0 :(得分:1)
您可以设置速度限制,以使其不会超过所需的最大速度:
rigidbody.velocity = Vector3.ClampMagnitude(rigidbody.velocity, maxSpeed);
或者,如果它没有破坏所需的物理方法,则可以直接修改对象的速度,并使用以下方法消除任何加速度:
rigidbody.velocity = new Vector3();