123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using VRTK;
- public class HandTooltipsManager : MonoBehaviour
- {
- public VRTK_ObjectTooltip triggerTooltip;
- public VRTK_ObjectTooltip gripTooltip;
- public VRTK_ObjectTooltip touchPadTooltip;
- public VRTK_ObjectTooltip buttonTwoTooltip;
- public Transform triggerAttach;
- public Transform gripAttach;
- public Transform touchPadAttach;
- public Transform buttonTwoAttach;
- [Header("CameraRig下对应")]
- public Transform handModel;
- private Dictionary<SDK_BaseController.ButtonTypes, MeshRenderer> renderers = new Dictionary<SDK_BaseController.ButtonTypes, MeshRenderer>();
- private List<MeshRenderer> flashingRenderers = new List<MeshRenderer>();
- private Material handleMaterial;
- private float startTime;
- private float tickCount;
- private int colorID;
- private void Awake()
- {
- colorID = Shader.PropertyToID("_Color");
- }
- public void ShowToolTip(SDK_BaseController.ButtonTypes _handBtnType)
- {
- InitRenderer();
- switch (_handBtnType)
- {
- case SDK_BaseController.ButtonTypes.ButtonOne:
- break;
- case SDK_BaseController.ButtonTypes.ButtonTwo:
- buttonTwoTooltip.gameObject.SetActive(true);
- buttonTwoAttach.gameObject.SetActive(true);
- SetFlashRendererState(SDK_BaseController.ButtonTypes.ButtonTwo, true);
- break;
- case SDK_BaseController.ButtonTypes.Grip:
- gripTooltip.gameObject.SetActive(true);
- gripAttach.gameObject.SetActive(true);
- SetFlashRendererState(SDK_BaseController.ButtonTypes.Grip, true);
- break;
- case SDK_BaseController.ButtonTypes.GripHairline:
- break;
- case SDK_BaseController.ButtonTypes.StartMenu:
- break;
- case SDK_BaseController.ButtonTypes.Trigger:
- triggerTooltip.gameObject.SetActive(true);
- triggerAttach.gameObject.SetActive(true);
- SetFlashRendererState(SDK_BaseController.ButtonTypes.Trigger, true);
- break;
- case SDK_BaseController.ButtonTypes.TriggerHairline:
- break;
- case SDK_BaseController.ButtonTypes.Touchpad:
- touchPadTooltip.gameObject.SetActive(true);
- touchPadAttach.gameObject.SetActive(true);
- SetFlashRendererState(SDK_BaseController.ButtonTypes.Touchpad, true);
- break;
- default:
- break;
- }
- }
- public void CloseToolTip(SDK_BaseController.ButtonTypes _handBtnType)
- {
- switch (_handBtnType)
- {
- case SDK_BaseController.ButtonTypes.ButtonOne:
- break;
- case SDK_BaseController.ButtonTypes.ButtonTwo:
- buttonTwoTooltip.gameObject.SetActive(false);
- buttonTwoAttach.gameObject.SetActive(false);
- SetFlashRendererState(SDK_BaseController.ButtonTypes.ButtonTwo, false);
- break;
- case SDK_BaseController.ButtonTypes.Grip:
- gripTooltip.gameObject.SetActive(false);
- gripAttach.gameObject.SetActive(false);
- SetFlashRendererState(SDK_BaseController.ButtonTypes.Grip, false);
- break;
- case SDK_BaseController.ButtonTypes.GripHairline:
- break;
- case SDK_BaseController.ButtonTypes.StartMenu:
- break;
- case SDK_BaseController.ButtonTypes.Trigger:
- triggerTooltip.gameObject.SetActive(false);
- triggerAttach.gameObject.SetActive(false);
- SetFlashRendererState(SDK_BaseController.ButtonTypes.Trigger, false);
- break;
- case SDK_BaseController.ButtonTypes.TriggerHairline:
- break;
- case SDK_BaseController.ButtonTypes.Touchpad:
- touchPadTooltip.gameObject.SetActive(false);
- touchPadAttach.gameObject.SetActive(false);
- SetFlashRendererState(SDK_BaseController.ButtonTypes.Touchpad, false);
- break;
- default:
- break;
- }
- }
- public void SetToolTips(bool state, bool flash)
- {
- InitRenderer();
- triggerTooltip.gameObject.SetActive(state);
- triggerAttach.gameObject.SetActive(state);
- gripTooltip.gameObject.SetActive(state);
- gripAttach.gameObject.SetActive(state);
- touchPadTooltip.gameObject.SetActive(state);
- touchPadAttach.gameObject.SetActive(state);
- buttonTwoTooltip.gameObject.SetActive(state);
- buttonTwoAttach.gameObject.SetActive(state);
- if (!state)
- {
- SetFlashRendererState(SDK_BaseController.ButtonTypes.Trigger, state);
- SetFlashRendererState(SDK_BaseController.ButtonTypes.Grip, state);
- SetFlashRendererState(SDK_BaseController.ButtonTypes.Touchpad, state);
- SetFlashRendererState(SDK_BaseController.ButtonTypes.ButtonTwo, state);
- }
- else
- {
- SetFlashRendererState(SDK_BaseController.ButtonTypes.Trigger, flash);
- SetFlashRendererState(SDK_BaseController.ButtonTypes.Grip, flash);
- SetFlashRendererState(SDK_BaseController.ButtonTypes.Touchpad, flash);
- SetFlashRendererState(SDK_BaseController.ButtonTypes.ButtonTwo, flash);
- }
- }
- public enum HandleInfo
- {
- body,
- button,
- lgrip,
- rgrip,
- sys_button,
- trackpad,
- trigger
- }
- public Material controllerMaterial;
- public Color flashColor = new Color(1.0f, 0.557f, 0.0f);
- public void InitRenderer()
- {
- if (renderers.Count > 0) { return; }
- AddRenderers(SDK_BaseController.ButtonTypes.Grip, HandleInfo.lgrip);
- AddRenderers(SDK_BaseController.ButtonTypes.Trigger, HandleInfo.trigger);
- AddRenderers(SDK_BaseController.ButtonTypes.Touchpad, HandleInfo.trackpad);
- AddRenderers(SDK_BaseController.ButtonTypes.ButtonTwo, HandleInfo.button);
- }
- public void AddRenderers(SDK_BaseController.ButtonTypes _buttonType, HandleInfo _handleInf)
- {
- if (!renderers.ContainsKey(_buttonType) && handModel.Find(_handleInf.ToString()) != null)
- {
- if (handleMaterial == null)
- {
- handleMaterial = handModel.Find(_handleInf.ToString()).GetComponent<MeshRenderer>().material;
- }
- renderers.Add(_buttonType, handModel.Find(_handleInf.ToString()).GetComponent<MeshRenderer>());
- //SetMaterial(renderers[_buttonType], controllerMaterial);
- }
- }
- public void SetMaterial(MeshRenderer _meshRenderer, Material mat)
- {
- Texture mainTexture = _meshRenderer.material.mainTexture;
- _meshRenderer.material = mat;
- _meshRenderer.material.mainTexture = mainTexture;
- _meshRenderer.material.renderQueue = mat.shader.renderQueue;
- //_meshRenderer.material.SetOverrideTag()
- }
- public void SetFlashRendererState(SDK_BaseController.ButtonTypes btnType, bool state)
- {
- if (state)
- {
- if (renderers.Count == 0) return;
- if (!flashingRenderers.Contains(renderers[btnType]))
- {
- renderers[btnType].material = controllerMaterial;
- flashingRenderers.Add(renderers[btnType]);
- }
- }
- else
- {
- if (renderers.Count == 0) return;
- if (flashingRenderers.Contains(renderers[btnType]))
- {
- renderers[btnType].material = handleMaterial;
- flashingRenderers.Remove(renderers[btnType]);
- }
- }
- }
- private void Update()
- {
- if (flashingRenderers.Count > 0)
- {
- Color baseColor = controllerMaterial.GetColor(colorID);
- float flash = (Time.realtimeSinceStartup - startTime) * Mathf.PI * 2.0f;
- flash = Mathf.Cos(flash);
- flash = RemapNumberClamped(flash, -1.0f, 1.0f, 0.0f, 1.0f);
- float ticks = (Time.realtimeSinceStartup - startTime);
- if (ticks - tickCount > 1.0f)
- {
- tickCount += 1.0f;
- }
- for (int i = 0; i < flashingRenderers.Count; i++)
- {
- Renderer r = flashingRenderers[i];
- r.material.SetColor(colorID, Color.Lerp(baseColor, flashColor, flash));
- }
- }
- }
- public float RemapNumber(float num, float low1, float high1, float low2, float high2)
- {
- return low2 + (num - low1) * (high2 - low2) / (high1 - low1);
- }
- public float RemapNumberClamped(float num, float low1, float high1, float low2, float high2)
- {
- return Mathf.Clamp(RemapNumber(num, low1, high1, low2, high2), Mathf.Min(low2, high2), Mathf.Max(low2, high2));
- }
- }
|