我正在尝试使球像庞然大物一样。我写了这段代码,但仍然遗漏了某些东西,或者我做错了什么。
我尝试使用物理材料,但我无法控制它。 当我将跳动设置为1时,Y位置会随着每一帧而增加。所以我不能那样做。
private void OnTriggerEnter(Collider other)
{
Debug.Log("Collied");
if(other.tag == "rightWall")
{
direction = false;
}
else if(other.tag == "leftWall")
{
direction = true;
}
if(other.tag == "groundWall") rigid.velocity = Vector3.up * 10;
if(other.tag != "topWall") BallMove();
}
void BallMove()
{
if (direction == false)
{
rigid.AddForce(Vector3.Lerp(transform.position, new Vector3(-300f, 0, 0), Time.deltaTime * ballForce));
}
else
{
rigid.AddForce(Vector3.Lerp(transform.position, new Vector3(300f, 0,0), Time.deltaTime * ballForce));
}
}
答案 0 :(得分:0)
您当然想使用冲动而不是用力(长时间施加力,而冲动更像是冲击,保持一帧) https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html
类似的东西:
rigid.AddForce(Vector3.Lerp(transform.position, new Vector3(300f, 0,0), Time.deltaTime * ballForce), ForceMode.Impulse);
答案 1 :(得分:0)
如果您要使刚性主体以恒定速度移动,则不应该使用力。
而是将球的“刚体drag
”设置为0并为其设置起始速度。
void Start(){
rigi.velocity=new Vector3(1f,1f,0f); //set any starting velocity you want
}
然后,当球碰到墙时,您只需翻转运动方向:
OnTriggerEnter(Collider other) {
if(other.gameObject.tag == "rightWall" || other.gameObject.tag == "leftWall")
{
rigi.velocity=new Vector3(-rigi.velocity.x, rigi.velocity.y, rigi.velocity.z);
} else if(other.gameObject.tag == "groundWall")
{
rigi.velocity = new Vector3(rigi.velocity.x, 10, rigi.velocity.z);
}
}
在您的情况下,我还建议您使{@ 1}