传递对象刚体属性(力,扭矩)并保持它们

时间:2018-05-30 05:08:26

标签: unity3d

我给了一个非活动的刚体,一个活动的刚体的运动属性。在我的程序中,有必要删除活动对象并将其替换为非活动对象。当我这样做时,非活动对象会像活动对象一样停止移动。

    {
        inactive.SetActive(true);
        inactive.transform.position = new Vector3(active.transform.position.x + 7.9f, active.transform.position.y, active.transform.position.z);
        inactive.transform.rotation = new Quaternion(active.transform.rotation.x, active.transform.rotation.y, active.transform.rotation.z, active.transform.rotation.w);
        inactive.GetComponent<Rigidbody>().AddTorque(0, 0, -active.transform.eulerAngles.z * Time.deltaTime);
        inactive.GetComponent<Rigidbody>().AddForce(active.GetComponent<Rigidbody>().velocity.x * Time.deltaTime, active.GetComponent<Rigidbody>().velocity.y * Time.deltaTime, active.GetComponent<Rigidbody>().velocity.z * Time.deltaTime);


        active.SetActive(false);

    }

如果我拿出来它可以正常工作

active.SetActive(false);

但我需要第一个对象消失。

此代码位于后期更新方法

2 个答案:

答案 0 :(得分:1)

这不会有用吗? 此外,对于物理学,在yieldUpdate或者在yield返回之后的协程中执行WaitForFixedUpdate()

    inactive.transform.position = active.position;
    inactive.transform.rotation = active.rotation;
    inactive.GetComponent<Rigidbody>().velocity=active.GetComponent<RigidBody>().velocity;

    inactive.GetComponent<Rigidbody>().angularVelocity=active.GetComponent<RigidBody>().angularVelocity;

    active.SetActive(false);
    inactive.SetActive(true);

答案 1 :(得分:0)

这是解决方案(感谢zambari)

if (IsOutOfBounds(active))
{
    inactiveT.position = new Vector3(x,x,x);
    inactiveT.rotation = activeT.rotation;
    inactiveRB.velocity = new Vector3(x,x,x);
    inactiveRB.angularVelocity = activeRB.angularVelocity;

    activeSword.SetActive(false);
    inactiveSword.SetActive(true);
}