using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 拼图控制 /// public class move : 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; 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.gameObject.name); 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.name == "GrupoPiezas") { distanceRay = hit.distance; piece = hit.collider.gameObject.transform.parent.gameObject; offset = hit.point - hit.collider.gameObject.transform.parent.position; isSelected = true; } } } /// /// 移动碎片(每帧调用) /// 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"); positionL = lightC.transform.position; positionX = lightC.transform.position.x; positionY = lightC.transform.position.y; positionZ = lightC.transform.position.z; //piece.transform.position = new Vector3(piece.transform.position.x, piece.transform.position.y, piece.transform.position.z); if (piece.name == "screan") { 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.65f && positionZ - piece.transform.position.z > -0.35f) ) { piece.transform.SetParent(lightC.transform.parent); piece.transform.position = new Vector3(positionX, positionY + 1.05f, positionZ - 0.15f); clickSFX.Play(); piece.tag = piece.name; } } 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 + 1.05f, positionZ + 0.15f); clickSFX.Play(); piece.tag = piece.name; } } if (piece.name == "tou") { if ( (positionX - piece.transform.position.x < 0.5f && positionX - piece.transform.position.x > -0.5f) && (positionY - piece.transform.position.y < 2.3f && positionY - piece.transform.position.y > 1.3f) && (positionZ - piece.transform.position.z < 0.6f && positionZ - piece.transform.position.z > -0.4f) ) { piece.transform.SetParent(lightC.transform.parent); piece.transform.position = new Vector3(positionX, positionY - 1.8f, positionZ - 0.1f); clickSFX.Play(); piece.tag = piece.name; } } isSelected = false; } } }