【问题标题】:How to bring Unity3d car gameobject to initial position without Destroying and Instantiating it again?如何将 Unity3d 汽车游戏对象带到初始位置而不再次破坏和实例化它?
【发布时间】:2014-08-26 11:36:58
【问题描述】:

我在 Unity3d 中制作了一辆前面有一个脚轮的两轮汽车。在为某些任务移动汽车后,我想在通过 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;

createRobot 是汽车基础游戏对象,createdRobotL 和 createdRobotR 分别是我的左右轮游戏对象。两个轮子通过可配置接头与底座连接。

现在,每当我在 FixedUpdate 中执行上述操作时,我的汽车都会回到初始位置,但它是正面朝上翻转的。我google了很多,但没有找到合适的解决方案。

我的 createdRobot、createdRobotL、createdRobotR 是另一个名为 Robot 的游戏对象的子对象,它不是刚体。

现在,如果我销毁机器人并使用预制件中的实例化再次创建,而不是使用上述方法进行重置,我的汽车正在按预期正确重置,但是这种方法会重置机器人中我不想要的所有内容。

GameObject.Destroy(GameObject.FindGameObjectWithTag("Robot_Tag"));
Instantiate(Robot,Task1ResetPosition.position,Task1ResetPosition.rotation);  

做上面的事情,就是让我的车正确地回到初始位置。但是,如果有人告诉我如何在不再次实例化的情况下将汽车带回初始位置,那将是可观的。

谢谢。

【问题讨论】:

    标签: unity3d unityscript gameobject


    【解决方案1】:

    强制刚体做事总是很棘手,因为它们应该由物理驱动。 对于您的每个装备部件,我会尝试这样的事情(未经测试):

    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 的位置/旋转而不是变换。 然后,如果这还不够,请强制它进入睡眠然后唤醒。 此外,您可以尝试在传送时将其设置为运动学:part.rigidbody.isKinematic = true/false;

    【讨论】:

    • 我已经在传送之前将基础装备设置为运动学。如果我没有将它设置为运动学,那么我整个身体都停在了现在的位置,没有任何动作。随着我进一步探索,我发现我的基础部件设计方向是“倒置”,因此可能会产生影响。固定到特定位置后,您知道旋转钻机的任何方法吗?
    • 有什么方法可以知道 Instantiate 在内部是如何工作的。
    • 好吧,实例化只是使用原始预制件的组件和属性创建新的游戏对象,因此它们对您销毁的对象的先前状态一无所知,它们是新创建的。使用 destroy+instantiate 显然是一种 hack,而不是正确的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多