Advertisement
Guest User

Untitled

a guest
Sep 18th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. using Microsoft.MixedReality.Toolkit;
  2. using Microsoft.MixedReality.Toolkit.Input;
  3. using UnityEngine;
  4.  
  5. /// <summary>
  6. /// Creates a clone of this game object when the item is grabbed using near interaction
  7. /// </summary>
  8. public class CloneOnGrab : MonoBehaviour
  9. {
  10. private void Start()
  11. {
  12. // Make sure we can be grabbed via near interaction
  13. gameObject.EnsureComponent<NearInteractionGrabbable>();
  14. var ph = gameObject.AddComponent<PointerHandler>();
  15. ph.OnPointerDown.AddListener(OnPointerDown);
  16. }
  17.  
  18. private bool IsDirectGrab(IMixedRealityPointer p)
  19. {
  20. return p is SpherePointer;
  21. }
  22.  
  23. void OnPointerDown(MixedRealityPointerEventData eventData)
  24. {
  25. if (IsDirectGrab(eventData.Pointer))
  26. {
  27. if (eventData.Pointer is MonoBehaviour monobehaviorPointer)
  28. {
  29. // Create a copy and reparent to the pointer for easy dragging
  30. var spawned = GameObject.Instantiate(gameObject);
  31. spawned.transform.position = transform.position;
  32. spawned.transform.parent = monobehaviorPointer.transform;
  33.  
  34. // Make sure we drop the object once we release
  35. // by receiving all pointer events and dropping the object
  36. // if the pointer grabbing us invoked on pointer up.
  37. var releaseOnUpHandler = spawned.AddComponent<PointerHandler>();
  38. CoreServices.InputSystem.RegisterHandler<IMixedRealityPointerHandler>(releaseOnUpHandler);
  39. releaseOnUpHandler.OnPointerUp.AddListener((e) =>
  40. {
  41. if (e.Pointer is MonoBehaviour monobehaviorPointer2
  42. && spawned.transform.parent == monobehaviorPointer2.transform)
  43. {
  44. spawned.transform.parent = null;
  45. CoreServices.InputSystem.UnregisterHandler<IMixedRealityPointerHandler>(releaseOnUpHandler);
  46. }
  47. });
  48. }
  49. else
  50. {
  51. Debug.Log($"{gameObject.name} is being grabbed by pointer that is not monobehaviour, cannot clone and drag it out.");
  52. }
  53. }
  54. }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement