我在Unity3d制造了一辆2轮车,前面有一个轮轮。在移动汽车完成一些任务后,我想让它回到最初的位置后,按下“停止”按钮通过Unity3d。我这样做的原因如下。
createdRobot.rigidbody.angularVelocity = Vector3.zero;
createdRobot.rigidbody.velocity = Vector3.zero;
createdRobotL.rigidbody.angularVelocity = Vector3.zero;
createdRobotL.rigidbody.velocity = Vector3.zero;
createdRobotR.rigidbody.angularVelocity = Vector3.zero;
createdRobotR.rigidbody.velocity = Vector3.zero;
createdRobot.transform.rotation = Task1ResetPosition.rotation;
createdRobot.transform.position = Task1ResetPosition.position;
createdRobotL.transform.rotation = Task1ResetPosition.rotation;
createdRobotL.transform.position = Task1ResetPosition.position;
createdRobotR.transform.rotation = Task1ResetPosition.rotation;
createdRobotR.transform.position = Task1ResetPosition.position;在createdRobot是由车底gameObject,createdRobotL和createdRobotR分别是我的左和右轮游戏对象。两个车轮都通过可配置的接头与底座连接。
现在,每当我在FixedUpdate做上述操作时,我的车就会到达最初的位置,但它是在前侧面翻转向上的状态。我谷歌了很多,但没有找到合适的解决方案。
我的createdRobot,createdRobotL,createdRobotR是另一个名为机器人的游戏对象的孩子,它不是一个刚体。
现在,如果我破坏了机器人并使用预制件实例化重新创建,那么就不用做上面提到的重置方法了,我的汽车正按照预期正确地重置,但是这个方法重置了机器人中我不想要的所有东西。
GameObject.Destroy(GameObject.FindGameObjectWithTag("Robot_Tag"));
Instantiate(Robot,Task1ResetPosition.position,Task1ResetPosition.rotation); 做以上的事情,是使我的车正确地到达最初的位置。但是,如果有人告诉我如何使汽车回到最初的位置,而不是再次实例化,那么它将是非常感激的。
谢谢。
发布于 2014-07-05 13:19:16
强迫刚体做事情总是很棘手的,因为它们应该是由物理驱动的。我会尝试像这样的东西(未经测试),对你的每个钻机部件:
part.rigidbody.Sleep();
part.rigidbody.velocity = Vector3.zero;
part.rigidbody.angularVelocity = Vector3.zero;
part.rigidbody.position = Vector3.zero;
part.rigidbody.rotation = Quaternion.identity;
part.rigidbody.WakeUp(); // might have to delay one frame there...首先,访问RB的位置/旋转,而不是转换。如果这还不够的话,强迫它进入睡眠然后WakeUp。另外,您可以在传送它时尝试将其设置为运动学:part.rigidbody.isKinematic = true/false;。
https://stackoverflow.com/questions/24586002
复制相似问题