MovePay.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. /// <summary>
  5. /// 拼图控制
  6. /// </summary>
  7. public class MovePay : 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 activeLeft = false;
  30. public bool activeRight = false;
  31. private void Start()
  32. {
  33. }
  34. void Update()
  35. {
  36. //鼠标信息
  37. //按下鼠标
  38. if (Input.GetMouseButtonDown(0))
  39. {
  40. TouchClick();
  41. }
  42. //移动鼠标
  43. if (isSelected)
  44. {
  45. MovePiece();
  46. }
  47. //释放鼠标
  48. if (Input.GetMouseButtonUp(0))
  49. {
  50. FreePiece();
  51. }
  52. }
  53. /// <summary>
  54. /// 定位点击点
  55. /// </summary>
  56. void TouchClick()
  57. {
  58. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //从相机到点的触控点
  59. RaycastHit hit;
  60. if (Physics.Raycast(ray, out hit))
  61. { //接收触控,如果有击中目标
  62. //print(hit.collider.transform.parent.tag);
  63. if (hit.collider.gameObject.tag == "shui")
  64. {
  65. distanceRay = hit.distance;
  66. piece = hit.collider.gameObject;
  67. offset = hit.point - hit.collider.gameObject.transform.position;
  68. isSelected = true;
  69. }
  70. else if (hit.collider.gameObject.transform.parent && (hit.collider.gameObject.transform.parent.name == "GrupoPiezas" || (hit.collider.gameObject.transform.parent.name == "group" && hit.collider.transform.parent.tag == "shui")))
  71. {
  72. distanceRay = hit.distance;
  73. piece = hit.collider.gameObject.transform.parent.gameObject;
  74. offset = hit.point - hit.collider.gameObject.transform.parent.position;
  75. isSelected = true;
  76. }
  77. else
  78. {
  79. isSelected = false;
  80. }
  81. }
  82. }
  83. /// <summary>
  84. /// 移动碎片(每帧调用)
  85. /// </summary>
  86. void MovePiece()
  87. {
  88. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  89. Vector3 limitRay = ray.GetPoint(distanceRay);
  90. limitRay = new Vector3(limitRay.x, limitRay.y, limitRay.z);
  91. piece.transform.position = limitRay - offset;
  92. }
  93. /// <summary>
  94. /// 释放碎片
  95. /// </summary>
  96. void FreePiece()
  97. {
  98. if (isSelected)
  99. {
  100. lightC = GameObject.Find("light");
  101. GameObject screan = GameObject.Find("group/screan");
  102. positionL = lightC.transform.position;
  103. positionX = lightC.transform.position.x;
  104. positionY = lightC.transform.position.y;
  105. positionZ = lightC.transform.position.z;
  106. float screanpositionX = screan.transform.position.x;
  107. float screanpositionY = screan.transform.position.y;
  108. float screanpositionZ = screan.transform.position.z;
  109. //piece.transform.position = new Vector3(piece.transform.position.x, piece.transform.position.y, piece.transform.position.z);
  110. //print(screan);
  111. // print(screan.tag);
  112. /*
  113. print(piece.name);
  114. print(positionL);
  115. print(piece.transform.position);
  116. print(positionX - piece.transform.position.x);
  117. print(positionY - piece.transform.position.y);
  118. print(positionZ - piece.transform.position.z);*/
  119. if (piece.name == "group")
  120. {
  121. if (
  122. (positionX - piece.transform.position.x < 0.5f && positionX - piece.transform.position.x > -0.5f) &&
  123. (positionY - piece.transform.position.y < 0.5f && positionY - piece.transform.position.y > -0.5f) &&
  124. (positionZ - piece.transform.position.z < 0.35f && positionZ - piece.transform.position.z > -0.35f)
  125. )
  126. {
  127. piece.transform.SetParent(lightC.transform.parent);
  128. piece.transform.position = new Vector3(positionX + 0.035f, positionY - 0.09f, positionZ + 0.1f);
  129. clickSFX.Play();
  130. piece.tag = "screan";
  131. }
  132. }
  133. if (piece.name == "ai")
  134. {
  135. if (
  136. (positionX - piece.transform.position.x < 0.5f && positionX - piece.transform.position.x > -0.5f) &&
  137. (positionY - piece.transform.position.y < 0.5f && positionY - piece.transform.position.y > -0.5f) &&
  138. (positionZ - piece.transform.position.z < 0.35f && positionZ - piece.transform.position.z > -0.35f)
  139. )
  140. {
  141. piece.transform.SetParent(lightC.transform.parent);
  142. piece.transform.position = new Vector3(positionX + 0.035f, positionY - 0.09f, positionZ - 0.1f);
  143. clickSFX.Play();
  144. piece.tag = piece.name;
  145. }
  146. }
  147. if (piece.name == "j2" && !activeLeft)
  148. {
  149. if (
  150. (positionX - piece.transform.position.x < -1.2f && positionX - piece.transform.position.x > -1.55f) &&
  151. (positionY - piece.transform.position.y < 1.25f && positionY - piece.transform.position.y > 0.25f) &&
  152. (positionZ - piece.transform.position.z < 0.5f && positionZ - piece.transform.position.z > -0.5f)
  153. )
  154. {
  155. piece.transform.SetParent(lightC.transform.parent);
  156. piece.transform.position = new Vector3(positionX + 1.48f, positionY - 0.75f, positionZ);
  157. clickSFX.Play();
  158. piece.tag = piece.name;
  159. activeLeft = true;
  160. }
  161. }
  162. if (piece.name == "j2" && !activeRight)
  163. {
  164. if (
  165. (positionX - piece.transform.position.x < 1.55f && positionX - piece.transform.position.x > 1.2f) &&
  166. (positionY - piece.transform.position.y < 1.25f && positionY - piece.transform.position.y > 0.25f) &&
  167. (positionZ - piece.transform.position.z < 0.5f && positionZ - piece.transform.position.z > -0.5f)
  168. )
  169. {
  170. piece.transform.SetParent(lightC.transform.parent);
  171. piece.transform.position = new Vector3(positionX - 1.48f, positionY - 0.75f, positionZ);
  172. clickSFX.Play();
  173. piece.tag = piece.name;
  174. activeRight = true;
  175. }
  176. }
  177. if (piece.name == "tou")
  178. {
  179. if (
  180. (screanpositionX - piece.transform.position.x < 0.5f && screanpositionX - piece.transform.position.x > -0.5f) &&
  181. (screanpositionY - piece.transform.position.y < 1.5f && screanpositionY - piece.transform.position.y > -1.5f) &&
  182. (screanpositionZ - piece.transform.position.z < 0.5f && screanpositionZ - piece.transform.position.z > -0.5f)
  183. )
  184. {
  185. piece.transform.SetParent(screan.transform.parent);
  186. piece.transform.position = new Vector3(screanpositionX, screanpositionY + 0.8f, screanpositionZ);
  187. clickSFX.Play();
  188. piece.tag = piece.name;
  189. }
  190. }
  191. //print(lightC.transform.parent.childCount);
  192. if (lightC.transform.parent.childCount == 5 && acitve && screan.transform.parent.childCount == 2)
  193. {
  194. Instantiate(menu, GameObject.FindGameObjectWithTag("UI").transform);
  195. acitve = false;
  196. }
  197. else
  198. {
  199. acitve = true;
  200. }
  201. isSelected = false;
  202. }
  203. }
  204. }