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;
}
}
}