2021년 4학년 1학기 기업연계프로젝트2 컴퓨터소프트웨어공학과 <원광투어팀> 팀장 : 송유진 팀원 : 김나영, 이경희, 한유진
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.

94 lines
2.7 KiB

5 years ago
  1. using HTC.UnityPlugin.ColliderEvent;
  2. using HTC.UnityPlugin.Utility;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. public class ResetButton : MonoBehaviour
  6. , IColliderEventPressEnterHandler
  7. , IColliderEventPressExitHandler
  8. {
  9. public Transform[] effectTargets;
  10. public Transform buttonObject;
  11. public Vector3 buttonDownDisplacement;
  12. [SerializeField]
  13. private ColliderButtonEventData.InputButton m_activeButton = ColliderButtonEventData.InputButton.Trigger;
  14. private RigidPose[] storedPoses;
  15. private HashSet<ColliderButtonEventData> pressingEvents = new HashSet<ColliderButtonEventData>();
  16. public ColliderButtonEventData.InputButton activeButton { get { return m_activeButton; } set { m_activeButton = value; } }
  17. private void Start()
  18. {
  19. StorePoses();
  20. }
  21. public void OnColliderEventPressEnter(ColliderButtonEventData eventData)
  22. {
  23. if (eventData.button == m_activeButton && pressingEvents.Add(eventData) && pressingEvents.Count == 1)
  24. {
  25. buttonObject.localPosition += buttonDownDisplacement;
  26. }
  27. }
  28. public void OnColliderEventPressExit(ColliderButtonEventData eventData)
  29. {
  30. if (pressingEvents.Remove(eventData) && pressingEvents.Count == 0)
  31. {
  32. buttonObject.localPosition -= buttonDownDisplacement;
  33. // check if event caster is still hovering this object
  34. foreach (var c in eventData.eventCaster.enteredColliders)
  35. {
  36. if (c.transform.IsChildOf(transform))
  37. {
  38. DoReset();
  39. return;
  40. }
  41. }
  42. }
  43. }
  44. public void StorePoses()
  45. {
  46. if (effectTargets == null)
  47. {
  48. storedPoses = null;
  49. return;
  50. }
  51. if (storedPoses == null || storedPoses.Length != effectTargets.Length)
  52. {
  53. storedPoses = new RigidPose[effectTargets.Length];
  54. }
  55. for (int i = 0; i < effectTargets.Length; ++i)
  56. {
  57. storedPoses[i] = new RigidPose(effectTargets[i]);
  58. }
  59. }
  60. public void DoReset()
  61. {
  62. if (effectTargets == null) { return; }
  63. for (int i = 0; i < effectTargets.Length; ++i)
  64. {
  65. var rigid = effectTargets[i].GetComponent<Rigidbody>();
  66. if (rigid != null)
  67. {
  68. rigid.MovePosition(storedPoses[i].pos);
  69. rigid.MoveRotation(storedPoses[i].rot);
  70. rigid.velocity = Vector3.zero;
  71. //rigid.angularVelocity = Vector3.zero;
  72. }
  73. else
  74. {
  75. effectTargets[i].position = storedPoses[i].pos;
  76. effectTargets[i].rotation = storedPoses[i].rot;
  77. }
  78. }
  79. }
  80. }