SW 중심대학 OSS GIT 서버 새로운 리포
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.6 KiB

5 years ago
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.XR.Interaction.Toolkit;
  5. public class XROffsetGrabInteractable : XRGrabInteractable
  6. {
  7. //Pivot을 리셋시키기 위해 원래 로컬 위치, 회전 저장
  8. private Vector3 initialAttachLocalPos;
  9. private Quaternion initialAttachLocalRot;
  10. protected virtual void Start()
  11. {
  12. //attachTransform 이 없다면 만들어준다.
  13. if(!attachTransform)
  14. {
  15. GameObject pivot = new GameObject("Attach Pivot"); //피봇용 빈 게임오브젝트를 만들어서
  16. pivot.transform.SetParent(transform, false); //자신의 자식으로 넣고, 위치를 0, 0, 0 으로
  17. attachTransform = pivot.transform;
  18. }
  19. initialAttachLocalPos = attachTransform.localPosition;
  20. initialAttachLocalRot = attachTransform.localRotation;
  21. }
  22. //잡는 순간 실행되는 함수 오버라이드
  23. protected override void OnSelectEntering(XRBaseInteractor interactor)
  24. {
  25. //직접 손으로 잡으면 Offset Grabbing
  26. if(interactor is XRDirectInteractor)
  27. {
  28. attachTransform.position = interactor.attachTransform.position;
  29. attachTransform.rotation = interactor.attachTransform.rotation;
  30. }
  31. else
  32. {
  33. //그 외에는 Pivot값을 원래대로 리셋시켜줌
  34. attachTransform.localPosition = initialAttachLocalPos;
  35. attachTransform.localRotation = initialAttachLocalRot;
  36. }
  37. base.OnSelectEntering(interactor);
  38. }
  39. }