MovePolice.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System.Runtime.InteropServices;
  5. /// <summary>
  6. /// 拼图控制
  7. /// </summary>
  8. public class MovePolice : MonoBehaviour
  9. {
  10. [DllImport("__Internal")]
  11. private static extern void noActive(bool active);
  12. //执行此选择
  13. bool isSelected;
  14. float distanceRay; //定位点击时计算
  15. GameObject piece; //分配点击时,将移动。
  16. Transform[] piecesMove;
  17. //[HideInInspector]
  18. //public float positionZ = -0.001f;
  19. [HideInInspector]
  20. public bool puzzlePlaying;
  21. Vector3 offset;
  22. GameObject lightC;
  23. public float positionX = 0f;
  24. public float positionY = 0f;
  25. public float positionZ = 0f;
  26. Vector3 positionL;
  27. //数字资源整合
  28. [Header("SFX")]
  29. public AudioSource clickSFX;
  30. public GameObject menu;
  31. public bool acitve = true;
  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 == "GrupoPiezas" || (hit.collider.gameObject.transform.parent.name == "group" && 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. lightC = GameObject.Find("light");
  102. GameObject screan = GameObject.Find("group/screan");
  103. positionL = lightC.transform.position;
  104. positionX = lightC.transform.position.x;
  105. positionY = lightC.transform.position.y;
  106. positionZ = lightC.transform.position.z;
  107. float screanpositionX = screan.transform.position.x;
  108. float screanpositionY = screan.transform.position.y;
  109. float screanpositionZ = screan.transform.position.z;
  110. //piece.transform.position = new Vector3(piece.transform.position.x, piece.transform.position.y, piece.transform.position.z);
  111. //print(screan);
  112. //print(screan.tag);
  113. if (piece.name == "group")
  114. {
  115. if (
  116. (positionX - piece.transform.position.x < 0.5f && positionX - piece.transform.position.x > -0.5f) &&
  117. (positionY - piece.transform.position.y < -0.5f && positionY - piece.transform.position.y > -1.5f) &&
  118. (positionZ - piece.transform.position.z < 0.35f && positionZ - piece.transform.position.z > -0.35f)
  119. )
  120. {
  121. piece.transform.SetParent(lightC.transform.parent);
  122. piece.transform.position = new Vector3(positionX, positionY + 0.8f, positionZ + 0.08f);
  123. clickSFX.Play();
  124. piece.tag = "screan";
  125. }
  126. }
  127. if (piece.name == "ai")
  128. {
  129. if (
  130. (positionX - piece.transform.position.x < 0.5f && positionX - piece.transform.position.x > -0.5f) &&
  131. (positionY - piece.transform.position.y < -0.5f && positionY - piece.transform.position.y > -1.5f) &&
  132. (positionZ - piece.transform.position.z < 0.35f && positionZ - piece.transform.position.z > -0.65f)
  133. )
  134. {
  135. piece.transform.SetParent(lightC.transform.parent);
  136. piece.transform.position = new Vector3(positionX, positionY + 0.8f, positionZ - 0.08f);
  137. clickSFX.Play();
  138. piece.tag = piece.name;
  139. }
  140. }
  141. if (piece.name == "tou")
  142. {
  143. if (
  144. (screanpositionX - piece.transform.position.x < 0.5f && screanpositionX - piece.transform.position.x > -0.5f) &&
  145. (screanpositionY - piece.transform.position.y < 1.5f && screanpositionY - piece.transform.position.y > -1.5f) &&
  146. (screanpositionZ - piece.transform.position.z < 0.5f && screanpositionZ - piece.transform.position.z > -0.5f)
  147. )
  148. {
  149. piece.transform.SetParent(screan.transform.parent);
  150. piece.transform.position = new Vector3(screanpositionX, screanpositionY + 0.7f, screanpositionZ);
  151. clickSFX.Play();
  152. piece.tag = piece.name;
  153. }
  154. }
  155. //print(lightC.transform.parent.childCount);
  156. if (lightC.transform.parent.childCount == 3 && acitve && screan.transform.parent.childCount == 2)
  157. {
  158. //Instantiate(menu, GameObject.FindGameObjectWithTag("UI").transform);
  159. acitve = false;
  160. noActive(!acitve);
  161. }
  162. else
  163. {
  164. acitve = true;
  165. noActive(!acitve);
  166. }
  167. isSelected = false;
  168. }
  169. }
  170. }