/// <summary> /// called by Physics World just before rigid body is added to world. /// the current rigid body properties are used to rebuild the rigid body. /// </summary> internal virtual bool _BuildCollisionObject() { WorldController world = GetWorld(); if (collisionObject != null) { if (isInWorld && world != null) { world.RemoveCollisionObject(this); } } if (transform.localScale != Vector3.one) { Debug.LogError("The local scale on this collision shape is not one. Bullet physics does not support scaling on a rigid body world transform. Instead alter the dimensions of the CollisionShape.", transform); } m_collisionShape = GetComponent <BCollisionShape>(); if (m_collisionShape == null) { Debug.LogError("There was no collision shape component attached to this BRigidBody. " + name, transform); return(false); } CollisionShape cs = m_collisionShape.GetCollisionShape(); //rigidbody is dynamic if and only if mass is non zero, otherwise static if (collisionObject == null) { collisionObject = new CollisionObject(); collisionObject.CollisionShape = cs; collisionObject.UserObject = this; MatrixB worldTrans; QuaternionB q = transform.rotation.ToBullet(); MatrixB.RotationQuaternion(ref q, out worldTrans); worldTrans.Origin = transform.position.ToBullet(); collisionObject.WorldTransform = worldTrans; collisionObject.CollisionFlags = m_collisionFlags; } else { collisionObject.CollisionShape = cs; MatrixB worldTrans; QuaternionB q = transform.rotation.ToBullet(); MatrixB.RotationQuaternion(ref q, out worldTrans); worldTrans.Origin = transform.position.ToBullet(); collisionObject.WorldTransform = worldTrans; collisionObject.CollisionFlags = m_collisionFlags; } return(true); }
public virtual void SetRotation(Quaternion rotation) { if (isInWorld) { MatrixB newTrans = collisionObject.WorldTransform; QuaternionB q = rotation.ToBullet(); MatrixB.RotationQuaternion(ref q, out newTrans); newTrans.Origin = transform.position.ToBullet(); collisionObject.WorldTransform = newTrans; transform.rotation = rotation; } else { transform.rotation = rotation; } }