namespace VRTK.Examples
|
|
{
|
|
using UnityEngine;
|
|
|
|
public class Sword : VRTK_InteractableObject
|
|
{
|
|
private float impactMagnifier = 120f;
|
|
private float collisionForce = 0f;
|
|
private float maxCollisionForce = 4000f;
|
|
private VRTK_ControllerReference controllerReference;
|
|
|
|
public float CollisionForce()
|
|
{
|
|
return collisionForce;
|
|
}
|
|
|
|
public override void Grabbed(VRTK_InteractGrab grabbingObject)
|
|
{
|
|
base.Grabbed(grabbingObject);
|
|
controllerReference = VRTK_ControllerReference.GetControllerReference(grabbingObject.controllerEvents.gameObject);
|
|
}
|
|
|
|
public override void Ungrabbed(VRTK_InteractGrab previousGrabbingObject)
|
|
{
|
|
base.Ungrabbed(previousGrabbingObject);
|
|
controllerReference = null;
|
|
}
|
|
|
|
protected override void OnEnable()
|
|
{
|
|
base.OnEnable();
|
|
controllerReference = null;
|
|
interactableRigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
|
|
}
|
|
|
|
private void OnCollisionEnter(Collision collision)
|
|
{
|
|
if (VRTK_ControllerReference.IsValid(controllerReference) && IsGrabbed())
|
|
{
|
|
collisionForce = VRTK_DeviceFinder.GetControllerVelocity(controllerReference).magnitude * impactMagnifier;
|
|
var hapticStrength = collisionForce / maxCollisionForce;
|
|
VRTK_ControllerHaptics.TriggerHapticPulse(controllerReference, hapticStrength, 0.5f, 0.01f);
|
|
}
|
|
else
|
|
{
|
|
collisionForce = collision.relativeVelocity.magnitude * impactMagnifier;
|
|
}
|
|
}
|
|
}
|
|
}
|