MoveDoor.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. /// <summary>
  5. /// 拼图控制
  6. /// </summary>
  7. public class MoveDoor : MonoBehaviour
  8. {
  9. //执行此选择
  10. bool isSelected;
  11. float distanceRay; //定位点击时计算
  12. GameObject piece; //分配点击时,将移动。
  13. Transform[] piecesMove;
  14. //[HideInInspector]
  15. //public float positionZ = -0.001f;
  16. [HideInInspector]
  17. public bool puzzlePlaying;
  18. Vector3 offset;
  19. GameObject lightC;
  20. public float positionX = 0f;
  21. public float positionY = 0f;
  22. public float positionZ = 0f;
  23. Vector3 positionL;
  24. //数字资源整合
  25. [Header("SFX")]
  26. public AudioSource clickSFX;
  27. public GameObject menu;
  28. public bool acitve = true;
  29. public bool b2A = false;
  30. public bool b3A = false;
  31. public bool b5A = false;
  32. private void Start()
  33. {
  34. }
  35. void Update()
  36. {
  37. //鼠标信息
  38. //按下鼠标
  39. if (Input.GetMouseButtonDown(0))
  40. {
  41. TouchClick();
  42. }
  43. //移动鼠标
  44. if (isSelected)
  45. {
  46. MovePiece();
  47. }
  48. //释放鼠标
  49. if (Input.GetMouseButtonUp(0))
  50. {
  51. FreePiece();
  52. }
  53. }
  54. /// <summary>
  55. /// 定位点击点
  56. /// </summary>
  57. void TouchClick()
  58. {
  59. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //从相机到点的触控点
  60. RaycastHit hit;
  61. if (Physics.Raycast(ray, out hit))
  62. { //接收触控,如果有击中目标
  63. //print(hit.collider.transform.parent.tag);
  64. if (hit.collider.gameObject.tag == "shui")
  65. {
  66. distanceRay = hit.distance;
  67. piece = hit.collider.gameObject;
  68. offset = hit.point - hit.collider.gameObject.transform.position;
  69. isSelected = true;
  70. }
  71. else if (hit.collider.gameObject.transform.parent && ((hit.collider.gameObject.transform.parent.name == "group3" && hit.collider.transform.parent.tag == "shui")))
  72. {
  73. distanceRay = hit.distance;
  74. piece = hit.collider.gameObject.transform.parent.gameObject;
  75. offset = hit.point - hit.collider.gameObject.transform.parent.position;
  76. isSelected = true;
  77. }
  78. else
  79. {
  80. isSelected = false;
  81. }
  82. }
  83. }
  84. /// <summary>
  85. /// 移动碎片(每帧调用)
  86. /// </summary>
  87. void MovePiece()
  88. {
  89. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  90. Vector3 limitRay = ray.GetPoint(distanceRay);
  91. limitRay = new Vector3(limitRay.x, limitRay.y, limitRay.z);
  92. piece.transform.position = limitRay - offset;
  93. }
  94. /// <summary>
  95. /// 释放碎片
  96. /// </summary>
  97. void FreePiece()
  98. {
  99. if (isSelected)
  100. {
  101. GameObject b6 = GameObject.Find("group3/b6");
  102. float b6X = b6.transform.position.x;
  103. float b6Y = b6.transform.position.y;
  104. float b6Z = b6.transform.position.z;
  105. if (piece.name == "b2")
  106. {
  107. if (
  108. (b6X - piece.transform.position.x < 0.8f && b6X - piece.transform.position.x > -0.5f) &&
  109. (b6Y - piece.transform.position.y < 0 && b6Y - piece.transform.position.y > -3f) &&
  110. (b6Z - piece.transform.position.z < 0.5f && b6Z - piece.transform.position.z > -0.5f)
  111. )
  112. {
  113. piece.transform.SetParent(b6.transform.parent);
  114. piece.transform.position = new Vector3(b6X - 0.29f, b6Y + 2.3f, b6Z);
  115. clickSFX.Play();
  116. piece.tag = piece.name;
  117. b2A = true;
  118. }
  119. }
  120. if (piece.name == "b3")
  121. {
  122. if (
  123. (b6X - piece.transform.position.x < -2 && b6X - piece.transform.position.x > -4) &&
  124. (b6Y - piece.transform.position.y < 0 && b6Y - piece.transform.position.y > -3f) &&
  125. (b6Z - piece.transform.position.z < 0.5f && b6Z - piece.transform.position.z > -0.5f)
  126. )
  127. {
  128. piece.transform.SetParent(b6.transform.parent);
  129. piece.transform.position = new Vector3(b6X + 3.1f, b6Y + 2.3f, b6Z);
  130. clickSFX.Play();
  131. piece.tag = piece.name;
  132. b3A = true;
  133. }
  134. }
  135. if (piece.name == "b5")
  136. {
  137. if (
  138. (b6X - piece.transform.position.x < -0.7f && b6X - piece.transform.position.x > -2) &&
  139. (b6Y - piece.transform.position.y < -3 && b6Y - piece.transform.position.y > -5.1f) &&
  140. (b6Z - piece.transform.position.z < 0.5f && b6Z - piece.transform.position.z > -0.5f) && b2A && b3A
  141. )
  142. {
  143. piece.transform.SetParent(b6.transform.parent);
  144. piece.transform.position = new Vector3(b6X + 1.25f, b6Y + 4.65f, b6Z + 0.13f);
  145. clickSFX.Play();
  146. piece.tag = piece.name;
  147. b5A = true;
  148. }
  149. }
  150. isSelected = false;
  151. }
  152. }
  153. }