我给了一个非活动的刚体,一个活动的刚体的运动属性。在我的程序中,有必要删除活动对象并将其替换为非活动对象。当我这样做时,非活动对象会像活动对象一样停止移动。
{
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);
但我需要第一个对象消失。
此代码位于后期更新方法
答案 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);
}