FPSBrowserUI.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System;
  2. using UnityEngine;
  3. namespace ZenFulcrum.EmbeddedBrowser {
  4. /**
  5. * Works like ClickMeshBrowserUI, but assumes you are pointing at buttons with your nose
  6. * (a camera or object's transform.forward) instead of with a visible mouse pointer.
  7. *
  8. * This relies on the given FPSCursorRenderer to render the cursor.
  9. *
  10. * Unlike MeshColliderBrowserUI, this won't be used by default. If you'd like to use it,
  11. * attach a UseFPSBrowserUI or call CursorCrosshair.SetUpBrowserInput.
  12. *
  13. * As with MeshColliderBrowserUI, pass in the mesh we interact on to {meshCollider}.
  14. *
  15. * {worldPointer} is the object we are pointing with. Usually you can use Camera.main.transsform.
  16. * Its world-space forward direction will be used to get the user's interaction ray.
  17. */
  18. [RequireComponent(typeof(Browser))]
  19. [RequireComponent(typeof(MeshCollider))]
  20. [Obsolete("Use PointerUIMesh instead.")]
  21. public class FPSBrowserUI : ClickMeshBrowserUI {
  22. protected Transform worldPointer;
  23. protected FPSCursorRenderer cursorRenderer;
  24. public void Start() {
  25. FPSCursorRenderer.SetUpBrowserInput(GetComponent<Browser>(), GetComponent<MeshCollider>());
  26. }
  27. public static FPSBrowserUI Create(MeshCollider meshCollider, Transform worldPointer, FPSCursorRenderer cursorRenderer) {
  28. var ui = meshCollider.gameObject.GetComponent<FPSBrowserUI>();
  29. if (!ui) ui = meshCollider.gameObject.AddComponent<FPSBrowserUI>();
  30. ui.meshCollider = meshCollider;
  31. ui.worldPointer = worldPointer;
  32. ui.cursorRenderer = cursorRenderer;
  33. return ui;
  34. }
  35. protected override Ray LookRay {
  36. get { return new Ray(worldPointer.position, worldPointer.forward); }
  37. }
  38. protected override void SetCursor(BrowserCursor newCursor) {
  39. if (newCursor != null && !MouseHasFocus) return;
  40. cursorRenderer.SetCursor(newCursor, this);
  41. }
  42. public override void InputUpdate() {
  43. if (!cursorRenderer.EnableInput) {
  44. MouseHasFocus = false;
  45. KeyboardHasFocus = false;
  46. return;
  47. }
  48. base.InputUpdate();
  49. }
  50. }
  51. }