You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
3.7 KiB
C#
98 lines
3.7 KiB
C#
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
using UnityEngine.XR;
|
|
//using UnityEngine.XR.OpenXR.Input;
|
|
|
|
namespace Autohand.Demo {
|
|
[HelpURL("https://app.gitbook.com/s/5zKO0EvOjzUDeT2aiFk3/auto-hand/controller-input")]
|
|
public class OpenXRHandControllerLink : HandControllerLink {
|
|
public InputActionProperty grabAxis;
|
|
public InputActionProperty squeezeAxis;
|
|
public InputActionProperty grabAction;
|
|
public InputActionProperty releaseAction;
|
|
public InputActionProperty squeezeAction;
|
|
public InputActionProperty stopSqueezeAction;
|
|
public InputActionProperty hapticAction;
|
|
|
|
|
|
private bool squeezing;
|
|
private bool grabbing;
|
|
private void Start() {
|
|
if(hand.left)
|
|
handLeft = this;
|
|
else
|
|
handRight = this;
|
|
}
|
|
|
|
|
|
public void OnEnable(){
|
|
if (grabAction == squeezeAction){
|
|
Debug.LogError("AUTOHAND: You are using the same button for grab and squeeze on HAND CONTROLLER LINK, this will create conflict or errors", this);
|
|
}
|
|
|
|
if(grabAxis.action != null) grabAxis.action.Enable();
|
|
if(squeezeAxis.action != null) squeezeAxis.action.Enable();
|
|
if(hapticAction.action != null) hapticAction.action.Enable();
|
|
if(grabAction.action != null) grabAction.action.performed += Grab;
|
|
if (grabAction.action != null) grabAction.action.Enable();
|
|
if (grabAction.action != null) grabAction.action.performed += Grab;
|
|
if (releaseAction.action != null) releaseAction.action.Enable();
|
|
if (releaseAction.action != null) releaseAction.action.performed += Release;
|
|
if (squeezeAction.action != null) squeezeAction.action.Enable();
|
|
if (squeezeAction.action != null) squeezeAction.action.performed += Squeeze;
|
|
if (stopSqueezeAction.action != null) stopSqueezeAction.action.Enable();
|
|
if (stopSqueezeAction.action != null) stopSqueezeAction.action.performed += StopSqueeze;
|
|
}
|
|
|
|
|
|
private void OnDisable(){
|
|
|
|
if (grabAction.action != null) grabAction.action.performed -= Grab;
|
|
if (releaseAction.action != null) releaseAction.action.performed -= Release;
|
|
if (squeezeAction.action != null) squeezeAction.action.performed -= Squeeze;
|
|
if (stopSqueezeAction.action != null) stopSqueezeAction.action.performed -= StopSqueeze;
|
|
}
|
|
|
|
|
|
private void Update() {
|
|
hand.SetGrip(grabAxis.action.ReadValue<float>(), squeezeAxis.action.ReadValue<float>());
|
|
}
|
|
|
|
private void Grab(InputAction.CallbackContext grab){
|
|
if (!grabbing){
|
|
hand.Grab();
|
|
grabbing = true;
|
|
}
|
|
}
|
|
|
|
private void Release(InputAction.CallbackContext grab){
|
|
if (grabbing){
|
|
hand.Release();
|
|
grabbing = false;
|
|
}
|
|
}
|
|
|
|
private void Squeeze(InputAction.CallbackContext grab){
|
|
if (!squeezing){
|
|
hand.Squeeze();
|
|
squeezing = true;
|
|
}
|
|
}
|
|
|
|
private void StopSqueeze(InputAction.CallbackContext grab){
|
|
if (squeezing){
|
|
hand.Unsqueeze();
|
|
squeezing = false;
|
|
}
|
|
}
|
|
|
|
public override void TryHapticImpulse(float duration, float amp, float freq = 10)
|
|
{
|
|
//OpenXRInput.SendHapticImpulse(hapticAction.action, amp, duration, hand.left ? UnityEngine.InputSystem.XR.XRController.leftHand : UnityEngine.InputSystem.XR.XRController.rightHand);
|
|
|
|
base.TryHapticImpulse(duration, amp, freq);
|
|
}
|
|
|
|
}
|
|
}
|