1 using System; 2 using UnityEngine; 3 using System.Collections; 4 using Pvr_UnitySDKAPI; 5 6 7 namespace Pvr_UnitySDKAPI 8 { 9 public enum ControllerVariety//定义枚举类型的控制种类变量10 {11 Controller0,12 Controller1,13 }14 } 15 16 public class Pvr_ControllerModuleInit : MonoBehaviour17 {18 19 public ControllerVariety Variety;20 public bool IsCustomModel = false;//是否是定制的模型21 [SerializeField]22 private GameObject dot;//游戏对象-点23 [SerializeField]24 private GameObject rayLine;//游戏对象射线25 [SerializeField]26 private GameObject controller;//邮箱对象控制器27 private int controllerDof = -1;28 private int mainHand = 0;29 private bool moduleState = true; //模块状态30 31 void Awake()32 {33 Pvr_ControllerManager.PvrServiceStartSuccessEvent += ServiceStartSuccess;34 Pvr_ControllerManager.SetControllerAbilityEvent += CheckControllerStateOfAbility;35 Pvr_ControllerManager.ControllerStatusChangeEvent += CheckControllerStateForGoblin;36 }37 void OnDestroy()38 {39 Pvr_ControllerManager.PvrServiceStartSuccessEvent -= ServiceStartSuccess;40 Pvr_ControllerManager.SetControllerAbilityEvent -= CheckControllerStateOfAbility;41 Pvr_ControllerManager.ControllerStatusChangeEvent -= CheckControllerStateForGoblin;42 }43 44 private void ServiceStartSuccess()45 {46 mainHand = Controller.UPvr_GetMainHandNess();//设置主手柄47 if (Variety == ControllerVariety.Controller0)48 {49 StartCoroutine(ShowAndHideRay(mainHand == 0 && Pvr_ControllerManager.controllerlink.controller0Connected));50 51 }52 if (Variety == ControllerVariety.Controller1)53 {54 StartCoroutine(ShowAndHideRay(mainHand == 1 && Pvr_ControllerManager.controllerlink.controller1Connected));55 }56 }57 58 private void CheckControllerStateForGoblin(string state)59 {60 if (Variety == ControllerVariety.Controller0)61 {62 StartCoroutine(ShowAndHideRay(Convert.ToBoolean(Convert.ToInt16(state))));63 }64 }65 66 private void CheckControllerStateOfAbility(string data)67 {68 mainHand = Controller.UPvr_GetMainHandNess();69 if (Variety == ControllerVariety.Controller0)70 {71 StartCoroutine(ShowAndHideRay(mainHand == 0 && Pvr_ControllerManager.controllerlink.controller0Connected));72 73 }74 if (Variety == ControllerVariety.Controller1)75 {76 StartCoroutine(ShowAndHideRay(mainHand == 1 && Pvr_ControllerManager.controllerlink.controller1Connected));77 }78 }79 80 private IEnumerator ShowAndHideRay(bool state)81 {82 yield return null;83 yield return null;84 if (moduleState)85 {86 dot.SetActive(state);87 rayLine.SetActive(state);88 }89 }90 91 public void ForceHideOrShow(bool state)92 {93 dot.SetActive(state);94 rayLine.SetActive(state);95 controller.SetActive(state);96 moduleState = state;97 }98 }