【发布时间】:2016-06-29 13:13:33
【问题描述】:
我有一个环作为游戏对象,我用键盘键在 y 轴上上下移动。
作为信息:两个游戏对象都附加了刚体和对撞机。
这里有一些代码:
// get key up and the ring will move upwards
if (Input.GetKey (KeyCode.UpArrow)&&(shouldMove))
{
transform.position += Vector3.up * speed * Time.deltaTime;
}
// get key down and the ring will move downwards
if (Input.GetKey (KeyCode.DownArrow))
{
transform.position += Vector3.down * speed * Time.deltaTime;
}
现在我想在它碰到另一个游戏对象时禁用它的移动。我尝试了 OnCollisionEnter 函数,它为我提供了我击中对象的信息(使用 debug.log)但是我可以继续移动它并推动隐藏的游戏对象......
void OnCollisionEnter(Collision collision) {
if (collision.gameObject.name == "Sphere") {
Debug.Log ("Hit Sphere");
}
}
【问题讨论】:
-
可以将
speed设置为0,将isKinematic设置为false。 -
我已经试过了。但是一旦我的游戏对象撞到另一个,它就会停止,我不能再向另一个方向移动它。我该如何调整?
-
如果您使用
rigidbody,您应该考虑使用Rigidbody.AddForce或Rigidbody.velocity而不是更改transform.position。当您使用对撞机和刚体时,最好使用物理组件。我写的设置应该可以工作,但没有必要将isKinematic设置为false。 -
是您的“Debug.Log ("Hit Sphere");”打印?
-
是的,debug.log 确实有效。问题是一旦我的对象被隐藏,它就会粘在这个游戏对象上。
标签: c# unity3d transform collision-detection collision