Pvr_ControllerModuleInit代码分析

 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 : MonoBehaviour
17 {
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 }
原文地址:https://www.cnblogs.com/krystalstar/p/9643789.html