public void SetPhysicsMode(E_PHYSICSMODE _Mode, bool _Network = true) { if (_Network) { m_PhotonView.RPC("SetPhysicsMode_RPC", RpcTarget.AllViaServer, _Mode); } else { SetPhysicsMode_RPC(_Mode); } }
protected virtual void Awake() { m_MaxHealth = m_Health; m_Rigid = GetComponent <Rigidbody>(); m_Transforms = GetComponentsInChildren <Transform>(); m_Colliders = GetComponentsInChildren <Collider>(); m_Renderers = GetComponentsInChildren <Renderer>(); m_PhotonView = GetComponent <PhotonView>(); m_ChangePhysicsType = m_PhysicsType; }
public void SetPhysicsMode_RPC(E_PHYSICSMODE _Mode) { m_ChangePhysicsType = _Mode; if (m_PhotonView.IsMine) { SetPhotonInstantiationData(new int[] { 0 }, new object[] { m_ChangePhysicsType }); } switch (_Mode) { case E_PHYSICSMODE.STATIC: { foreach (Transform t in m_Transforms) { t.gameObject.layer = Common.STATIC_LAYER; } m_Rigid.useGravity = false; m_Rigid.isKinematic = true; m_Rigid.interpolation = RigidbodyInterpolation.None; m_Rigid.collisionDetectionMode = CollisionDetectionMode.ContinuousSpeculative; foreach (Collider c in m_Colliders) { c.isTrigger = false; } } break; case E_PHYSICSMODE.DYNAMIC: { foreach (Transform t in m_Transforms) { t.gameObject.layer = Common.DYNAMIC_LAYER; } m_Rigid.useGravity = true; m_Rigid.isKinematic = false; m_Rigid.interpolation = RigidbodyInterpolation.Interpolate; m_Rigid.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic; foreach (Collider c in m_Colliders) { c.isTrigger = false; } } break; case E_PHYSICSMODE.DYNAMIC_KINEMATIC: { foreach (Transform t in m_Transforms) { t.gameObject.layer = Common.DYNAMIC_LAYER; } m_Rigid.useGravity = false; m_Rigid.isKinematic = true; m_Rigid.interpolation = RigidbodyInterpolation.None; m_Rigid.collisionDetectionMode = CollisionDetectionMode.ContinuousSpeculative; foreach (Collider c in m_Colliders) { c.isTrigger = true; } } break; case E_PHYSICSMODE.ATTACHED: { foreach (Transform t in m_Transforms) { t.gameObject.layer = Common.ATTACHED_LAYER; } m_Rigid.useGravity = false; m_Rigid.isKinematic = true; m_Rigid.interpolation = RigidbodyInterpolation.None; m_Rigid.collisionDetectionMode = CollisionDetectionMode.ContinuousSpeculative; foreach (Collider c in m_Colliders) { c.isTrigger = true; } } break; case E_PHYSICSMODE.OPERATING: { foreach (Transform t in m_Transforms) { t.gameObject.layer = Common.OPERATING_LAYER; } m_Rigid.useGravity = false; m_Rigid.isKinematic = true; m_Rigid.interpolation = RigidbodyInterpolation.None; m_Rigid.collisionDetectionMode = CollisionDetectionMode.Discrete; foreach (Collider c in m_Colliders) { c.isTrigger = true; } } break; case E_PHYSICSMODE.CHARACTER: { foreach (Transform t in m_Transforms) { gameObject.layer = Common.CHARACTER_LAYER; } m_Rigid.useGravity = true; m_Rigid.isKinematic = false; m_Rigid.interpolation = RigidbodyInterpolation.Interpolate; m_Rigid.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic; m_Rigid.constraints = RigidbodyConstraints.FreezeRotation; } break; } }