using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 拼图控制 /// public class MovePolice : MonoBehaviour { //执行此选择 bool isSelected; float distanceRay; //定位点击时计算 GameObject piece; //分配点击时,将移动。 Transform[] piecesMove; //[HideInInspector] //public float positionZ = -0.001f; [HideInInspector] public bool puzzlePlaying; Vector3 offset; GameObject lightC; public float positionX = 0f; public float positionY = 0f; public float positionZ = 0f; Vector3 positionL; //数字资源整合 [Header("SFX")] public AudioSource clickSFX; public GameObject menu; public bool acitve = true; private void Start() { } void Update() { //鼠标信息 //按下鼠标 if (Input.GetMouseButtonDown(0)) { TouchClick(); } //移动鼠标 if (isSelected) { MovePiece(); } //释放鼠标 if (Input.GetMouseButtonUp(0)) { FreePiece(); } } /// /// 定位点击点 /// void TouchClick() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //从相机到点的触控点 RaycastHit hit; if (Physics.Raycast(ray, out hit)) { //接收触控,如果有击中目标 //print(hit.collider.transform.parent.tag); if (hit.collider.gameObject.tag == "shui") { distanceRay = hit.distance; piece = hit.collider.gameObject; offset = hit.point - hit.collider.gameObject.transform.position; isSelected = true; } 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"))) { distanceRay = hit.distance; piece = hit.collider.gameObject.transform.parent.gameObject; offset = hit.point - hit.collider.gameObject.transform.parent.position; isSelected = true; } else { isSelected = false; } } } /// /// 移动碎片(每帧调用) /// void MovePiece() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Vector3 limitRay = ray.GetPoint(distanceRay); limitRay = new Vector3(limitRay.x, limitRay.y, limitRay.z); piece.transform.position = limitRay - offset; } /// /// 释放碎片 /// void FreePiece() { if (isSelected) { lightC = GameObject.Find("light"); GameObject screan = GameObject.Find("group/screan"); positionL = lightC.transform.position; positionX = lightC.transform.position.x; positionY = lightC.transform.position.y; positionZ = lightC.transform.position.z; float screanpositionX = screan.transform.position.x; float screanpositionY = screan.transform.position.y; float screanpositionZ = screan.transform.position.z; //piece.transform.position = new Vector3(piece.transform.position.x, piece.transform.position.y, piece.transform.position.z); //print(screan); //print(screan.tag); if (piece.name == "group") { if ( (positionX - piece.transform.position.x < 0.5f && positionX - piece.transform.position.x > -0.5f) && (positionY - piece.transform.position.y < -0.5f && positionY - piece.transform.position.y > -1.5f) && (positionZ - piece.transform.position.z < 0.35f && positionZ - piece.transform.position.z > -0.35f) ) { piece.transform.SetParent(lightC.transform.parent); piece.transform.position = new Vector3(positionX, positionY + 0.8f, positionZ + 0.08f); clickSFX.Play(); piece.tag = "screan"; } } if (piece.name == "ai") { if ( (positionX - piece.transform.position.x < 0.5f && positionX - piece.transform.position.x > -0.5f) && (positionY - piece.transform.position.y < -0.5f && positionY - piece.transform.position.y > -1.5f) && (positionZ - piece.transform.position.z < 0.35f && positionZ - piece.transform.position.z > -0.65f) ) { piece.transform.SetParent(lightC.transform.parent); piece.transform.position = new Vector3(positionX, positionY + 0.8f, positionZ - 0.08f); clickSFX.Play(); piece.tag = piece.name; } } if (piece.name == "tou") { if ( (screanpositionX - piece.transform.position.x < 0.5f && screanpositionX - piece.transform.position.x > -0.5f) && (screanpositionY - piece.transform.position.y < 1.5f && screanpositionY - piece.transform.position.y > -1.5f) && (screanpositionZ - piece.transform.position.z < 0.5f && screanpositionZ - piece.transform.position.z > -0.5f) ) { piece.transform.SetParent(screan.transform.parent); piece.transform.position = new Vector3(screanpositionX, screanpositionY + 0.7f, screanpositionZ); clickSFX.Play(); piece.tag = piece.name; } } //print(lightC.transform.parent.childCount); if (lightC.transform.parent.childCount == 3 && acitve && screan.transform.parent.childCount == 2) { Instantiate(menu, GameObject.FindGameObjectWithTag("UI").transform); acitve = false; } else { acitve = true; } isSelected = false; } } }