move.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. /// <summary>
  5. /// 拼图控制
  6. /// </summary>
  7. public class move : 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. private void Start()
  28. {
  29. }
  30. void Update()
  31. {
  32. //鼠标信息
  33. //按下鼠标
  34. if (Input.GetMouseButtonDown(0))
  35. {
  36. TouchClick();
  37. }
  38. //移动鼠标
  39. if (isSelected)
  40. {
  41. MovePiece();
  42. }
  43. //释放鼠标
  44. if (Input.GetMouseButtonUp(0))
  45. {
  46. FreePiece();
  47. }
  48. }
  49. /// <summary>
  50. /// 定位点击点
  51. /// </summary>
  52. void TouchClick()
  53. {
  54. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //从相机到点的触控点
  55. RaycastHit hit;
  56. if (Physics.Raycast(ray, out hit))
  57. { //接收触控,如果有击中目标
  58. //print(hit.collider.gameObject.name);
  59. if (hit.collider.gameObject.tag == "shui")
  60. {
  61. distanceRay = hit.distance;
  62. piece = hit.collider.gameObject;
  63. offset = hit.point - hit.collider.gameObject.transform.position;
  64. isSelected = true;
  65. }
  66. else if(hit.collider.gameObject.transform.parent.name == "GrupoPiezas") {
  67. distanceRay = hit.distance;
  68. piece = hit.collider.gameObject.transform.parent.gameObject;
  69. offset = hit.point - hit.collider.gameObject.transform.parent.position;
  70. isSelected = true;
  71. }
  72. }
  73. }
  74. /// <summary>
  75. /// 移动碎片(每帧调用)
  76. /// </summary>
  77. void MovePiece()
  78. {
  79. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  80. Vector3 limitRay = ray.GetPoint(distanceRay);
  81. limitRay = new Vector3(limitRay.x, limitRay.y, limitRay.z);
  82. piece.transform.position = limitRay - offset;
  83. }
  84. /// <summary>
  85. /// 释放碎片
  86. /// </summary>
  87. void FreePiece()
  88. {
  89. if (isSelected) {
  90. lightC = GameObject.Find("light");
  91. positionL = lightC.transform.position;
  92. positionX = lightC.transform.position.x;
  93. positionY = lightC.transform.position.y;
  94. positionZ = lightC.transform.position.z;
  95. //piece.transform.position = new Vector3(piece.transform.position.x, piece.transform.position.y, piece.transform.position.z);
  96. if (piece.name == "screan") {
  97. if (
  98. (positionX - piece.transform.position.x < 0.5f && positionX - piece.transform.position.x > -0.5f) &&
  99. (positionY - piece.transform.position.y < -0.5f && positionY - piece.transform.position.y > -1.5f) &&
  100. (positionZ - piece.transform.position.z < 0.65f && positionZ - piece.transform.position.z > -0.35f)
  101. )
  102. {
  103. piece.transform.SetParent(lightC.transform.parent);
  104. piece.transform.position = new Vector3(positionX, positionY + 1.05f, positionZ - 0.15f);
  105. clickSFX.Play();
  106. piece.tag = piece.name;
  107. }
  108. }
  109. if (piece.name == "ai")
  110. {
  111. if (
  112. (positionX - piece.transform.position.x < 0.5f && positionX - piece.transform.position.x > -0.5f) &&
  113. (positionY - piece.transform.position.y < -0.5f && positionY - piece.transform.position.y > -1.5f) &&
  114. (positionZ - piece.transform.position.z < 0.35f && positionZ - piece.transform.position.z > -0.65f)
  115. )
  116. {
  117. piece.transform.SetParent(lightC.transform.parent);
  118. piece.transform.position = new Vector3(positionX, positionY + 1.05f, positionZ + 0.15f);
  119. clickSFX.Play();
  120. piece.tag = piece.name;
  121. }
  122. }
  123. if (piece.name == "tou")
  124. {
  125. if (
  126. (positionX - piece.transform.position.x < 0.5f && positionX - piece.transform.position.x > -0.5f) &&
  127. (positionY - piece.transform.position.y < 2.3f && positionY - piece.transform.position.y > 1.3f) &&
  128. (positionZ - piece.transform.position.z < 0.6f && positionZ - piece.transform.position.z > -0.4f)
  129. )
  130. {
  131. piece.transform.SetParent(lightC.transform.parent);
  132. piece.transform.position = new Vector3(positionX, positionY - 1.8f, positionZ - 0.1f);
  133. clickSFX.Play();
  134. piece.tag = piece.name;
  135. }
  136. }
  137. isSelected = false;
  138. }
  139. }
  140. }