public virtual void OnColliderEventDragFixedUpdate(ColliderButtonEventData eventData) { if (eventData != grabbedEvent) { return; } if (moveByVelocity) { // if rigidbody exists, follow eventData caster using physics var casterPose = GetEventPose(eventData); var offsetPose = eventList.GetLastValue(); if (alignPosition) { offsetPose.pos = alignPositionOffset; } if (alignRotation) { offsetPose.rot = Quaternion.Euler(alignRotationOffset); } var targetPose = casterPose * offsetPose; RigidPose.SetRigidbodyVelocity(rigid, rigid.position, targetPose.pos, followingDuration); RigidPose.SetRigidbodyAngularVelocity(rigid, rigid.rotation, targetPose.rot, followingDuration, overrideMaxAngularVelocity); } }
protected void OnGrabRigidbody() { var targetPose = currentGrabber.grabberOrigin * currentGrabber.grabOffset; ModifyPose(ref targetPose, null); RigidPose.SetRigidbodyVelocity(grabRigidbody, grabRigidbody.position, targetPose.pos, followingDuration); RigidPose.SetRigidbodyAngularVelocity(grabRigidbody, grabRigidbody.rotation, targetPose.rot, followingDuration, overrideMaxAngularVelocity); }
protected virtual void FixedUpdate() { if (isPoseValid) { RigidPose.SetRigidbodyVelocity(rigid, rigid.position, targetPose.pos, followingDuration); RigidPose.SetRigidbodyAngularVelocity(rigid, rigid.rotation, targetPose.rot, followingDuration); } else { rigid.velocity = Vector3.zero; rigid.angularVelocity = Vector3.zero; } }
protected virtual void DoDrop() { if (grabRigidbody != null && !grabRigidbody.isKinematic && m_poseSamples.Count > 0) { var framePose = m_poseSamples.Dequeue(); var deltaTime = Time.time - framePose.time; RigidPose.SetRigidbodyVelocity(grabRigidbody, framePose.pose.pos, transform.position, deltaTime); RigidPose.SetRigidbodyAngularVelocity(grabRigidbody, framePose.pose.rot, transform.rotation, deltaTime, overrideMaxAngularVelocity); m_poseSamples.Clear(); } }
private void DoDrop() { if (!moveByVelocity && rigid != null && !rigid.isKinematic && m_prevPose != RigidPose.identity) { RigidPose.SetRigidbodyVelocity(rigid, m_prevPose.pos, transform.position, Time.deltaTime); RigidPose.SetRigidbodyAngularVelocity(rigid, m_prevPose.rot, transform.rotation, Time.deltaTime, overrideMaxAngularVelocity); m_prevPose = RigidPose.identity; } if (onDrop != null) { onDrop.Invoke(this); } }
protected virtual void FixedUpdate() { if (!isDragged) { return; } if (moveByVelocity) { // if rigidbody exists, follow eventData caster using physics var casterPose = GetEventPose(draggedEvent); var offsetPose = eventList.GetLastValue(); var targetPose = casterPose * offsetPose; RigidPose.SetRigidbodyVelocity(rigid, rigid.position, targetPose.pos, followingDuration); RigidPose.SetRigidbodyAngularVelocity(rigid, rigid.rotation, targetPose.rot, followingDuration, overrideMaxAngularVelocity); } }
protected virtual void FixedUpdate() { if (isGrabbed && moveByVelocity) { // if rigidbody exists, follow eventData caster using physics var casterPose = GetEventPose(grabbedEvent); var offsetPose = grabbedData.offset; if (alignPosition) { offsetPose.pos = alignPositionOffset; } if (alignRotation) { offsetPose.rot = Quaternion.Euler(alignRotationOffset); } var targetPose = casterPose * offsetPose; RigidPose.SetRigidbodyVelocity(rigid, rigid.position, targetPose.pos, followingDuration); RigidPose.SetRigidbodyAngularVelocity(rigid, rigid.rotation, targetPose.rot, followingDuration, overrideMaxAngularVelocity); } }
protected void ClearGrabbers(bool doDrop) { if (m_grabbers.Count == 0) { return; } CheckRecursiveException("ClearGrabbers"); if (m_beforeGrabberReleased != null) { m_grabMutex = true; m_beforeGrabberReleased(); m_grabMutex = false; } m_grabbers.Clear(); currentGrabber = null; if (doDrop) { if (grabRigidbody != null && !grabRigidbody.isKinematic && m_poseSamples.Count > 0) { var framePose = m_poseSamples.Dequeue(); var deltaTime = Time.time - framePose.time; RigidPose.SetRigidbodyVelocity(grabRigidbody, framePose.pose.pos, transform.position, deltaTime); RigidPose.SetRigidbodyAngularVelocity(grabRigidbody, framePose.pose.rot, transform.rotation, deltaTime, overrideMaxAngularVelocity); m_poseSamples.Clear(); } if (m_onGrabberDrop != null) { m_onGrabberDrop(); } } }