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