using System.Collections;
using System.Collections.Generic;
using UnityEngine;
///
/// 拼图控制
///
public class MoveDoor : 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;
public bool b2A = false;
public bool b3A = false;
public bool b5A = false;
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);
//print(hit.collider.transform.parent.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 &&
(
(hit.collider.gameObject.transform.parent.name == "group3" && hit.collider.transform.parent.tag == "shui") ||
(hit.collider.gameObject.transform.parent.name == "group2" && hit.collider.transform.parent.tag == "shui") ||
(hit.collider.gameObject.transform.parent.name == "group" && hit.collider.transform.parent.tag == "shui") ||
(hit.collider.gameObject.transform.parent.name == "sgroup" && hit.collider.transform.parent.tag == "shui") ||
(hit.collider.gameObject.transform.parent.name == "group4" && 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)
{
GameObject b6 = GameObject.Find("group3/b6");
float b6X = b6.transform.position.x;
float b6Y = b6.transform.position.y;
float b6Z = b6.transform.position.z;
GameObject b7 = GameObject.Find("group2/b7");
float b7X = b7.transform.position.x;
float b7Y = b7.transform.position.y;
float b7Z = b7.transform.position.z;
GameObject door = GameObject.Find("group4/door");
float doorX = door.transform.position.x;
float doorY = door.transform.position.y;
float doorZ = door.transform.position.z;
GameObject ai = GameObject.Find("sgroup/ai");
float aiX = ai.transform.position.x;
float aiY = ai.transform.position.y;
float aiZ = ai.transform.position.z;
GameObject b4 = GameObject.Find("group/b4");
float b4X = b4.transform.position.x;
float b4Y = b4.transform.position.y;
float b4Z = b4.transform.position.z;
if (piece.name == "b2")
{
if (
(b6X - piece.transform.position.x < 0.8f && b6X - piece.transform.position.x > -0.5f) &&
(b6Y - piece.transform.position.y < 0 && b6Y - piece.transform.position.y > -3f) &&
(b6Z - piece.transform.position.z < 0.5f && b6Z - piece.transform.position.z > -0.5f)
)
{
piece.transform.SetParent(b6.transform.parent);
piece.transform.position = new Vector3(b6X - 0.29f, b6Y + 2.3f, b6Z);
clickSFX.Play();
piece.tag = piece.name;
b2A = true;
}
}
if (piece.name == "b3")
{
if (
(b6X - piece.transform.position.x < -2 && b6X - piece.transform.position.x > -4) &&
(b6Y - piece.transform.position.y < 0 && b6Y - piece.transform.position.y > -3f) &&
(b6Z - piece.transform.position.z < 0.5f && b6Z - piece.transform.position.z > -0.5f)
)
{
piece.transform.SetParent(b6.transform.parent);
piece.transform.position = new Vector3(b6X + 3.1f, b6Y + 2.3f, b6Z);
clickSFX.Play();
piece.tag = piece.name;
b3A = true;
}
}
if (piece.name == "b5")
{
if (
(b6X - piece.transform.position.x < -0.7f && b6X - piece.transform.position.x > -2) &&
(b6Y - piece.transform.position.y < -3 && b6Y - piece.transform.position.y > -5.1f) &&
(b6Z - piece.transform.position.z < 0.5f && b6Z - piece.transform.position.z > -0.5f) && b2A && b3A
)
{
piece.transform.SetParent(b6.transform.parent);
piece.transform.position = new Vector3(b6X + 1.25f, b6Y + 4.65f, b6Z + 0.13f);
clickSFX.Play();
piece.tag = piece.name;
b5A = true;
}
}
if (piece.name == "duo2")
{
if (
(b6X - piece.transform.position.x < -2.25f && b6X - piece.transform.position.x > -3.3f) &&
(b6Y - piece.transform.position.y < -4 && b6Y - piece.transform.position.y > -5.4f) &&
(b6Z - piece.transform.position.z < 0.5f && b6Z - piece.transform.position.z > -0.5f) && b2A && b3A && b5A
)
{
piece.transform.SetParent(b6.transform.parent);
piece.transform.position = new Vector3(b6X + 2.75f, b6Y + 4.9f, b6Z + 0.22f);
clickSFX.Play();
piece.tag = piece.name;
}
}
if (piece.name == "duo1")
{
if (
(b7X - piece.transform.position.x < 0.5f && b7X - piece.transform.position.x > -0.5f) &&
(b7Y - piece.transform.position.y < 0.5f && b7Y - piece.transform.position.y > -0.5f) &&
(b7Z - piece.transform.position.z < 0.5f && b7Z - piece.transform.position.z > -0.5f)
)
{
piece.transform.SetParent(b7.transform.parent);
piece.transform.position = new Vector3(b7X + 0.1f, b7Y + 0.14f, b7Z);
clickSFX.Play();
piece.tag = piece.name;
}
}
if (piece.name == "group2")
{
if (
(doorX - piece.transform.position.x < -0.5f && doorX - piece.transform.position.x > -1.6f) &&
(doorY - piece.transform.position.y < -1.5f && doorY - piece.transform.position.y > -2.55f) &&
(doorZ - piece.transform.position.z < 0.5f && doorZ - piece.transform.position.z > -0.5f) && b7.transform.parent.childCount == 2
)
{
piece.transform.SetParent(door.transform.parent);
piece.transform.position = new Vector3(doorX + 1.1f, doorY + 2.05f, doorZ);
clickSFX.Play();
piece.tag = "TempTag";
}
}
if (piece.name == "group4")
{
print(b6X - piece.transform.position.x);
print(b6Y - piece.transform.position.y);
print(b6Z - piece.transform.position.z);
if (
(b6X - piece.transform.position.x < -0.7f && b6X - piece.transform.position.x > -2) &&
(b6Y - piece.transform.position.y < -1.7f && b6Y - piece.transform.position.y > -3f) &&
(b6Z - piece.transform.position.z < 0.5f && b6Z - piece.transform.position.z > -0.5f) && b2A && b3A && b5A
)
{
piece.transform.SetParent(b6.transform.parent);
piece.transform.position = new Vector3(b6X + 1.37f, b6Y + 2.28f, b6Z);
clickSFX.Play();
piece.tag = "TempTag";
}
}
if (piece.name == "group")
{
if (
(b6X - piece.transform.position.x < 2f && b6X - piece.transform.position.x > 1f) &&
(b6Y - piece.transform.position.y < -1.2f && b6Y - piece.transform.position.y > -2.25f) &&
(b6Z - piece.transform.position.z < 0.5f && b6Z - piece.transform.position.z > -0.5f) && b2A
)
{
piece.transform.SetParent(b6.transform.parent);
piece.transform.position = new Vector3(b6X - 1.5f, b6Y + 1.75f, b6Z);
clickSFX.Play();
piece.tag = "TempTag";
b5A = true;
}
}
if (piece.name == "tou")
{
if (
(aiX - piece.transform.position.x < 0.5f && aiX - piece.transform.position.x > -0.5f) &&
(aiY - piece.transform.position.y < -0.45f && aiY - piece.transform.position.y > -1.45f) &&
(aiZ - piece.transform.position.z < 0.5f && aiZ - piece.transform.position.z > -0.5f)
)
{
piece.transform.SetParent(ai.transform.parent);
piece.transform.position = new Vector3(aiX, aiY + 0.95f, aiZ);
clickSFX.Play();
piece.tag = piece.name;
}
}
if (piece.name == "screen")
{
if (
(aiX - piece.transform.position.x < 0.5f && aiX - piece.transform.position.x > -0.5f) &&
(aiY - piece.transform.position.y < 0.5f && aiY - piece.transform.position.y > -0.5f) &&
(aiZ - piece.transform.position.z < 0.5f && aiZ - piece.transform.position.z > -0.5f)
)
{
piece.transform.SetParent(ai.transform.parent);
piece.transform.position = new Vector3(aiX, aiY, aiZ + 0.1f);
clickSFX.Play();
piece.tag = piece.name;
}
}
if (piece.name == "tuozhan")
{
if (
(aiX - piece.transform.position.x < 0.5f && aiX - piece.transform.position.x > -0.5f) &&
(aiY - piece.transform.position.y < 0.5f && aiY - piece.transform.position.y > -0.5f) &&
(aiZ - piece.transform.position.z < 0.5f && aiZ - piece.transform.position.z > -0.5f)
)
{
piece.transform.SetParent(ai.transform.parent);
piece.transform.position = new Vector3(aiX, aiY, aiZ - 0.1f);
clickSFX.Play();
piece.tag = piece.name;
}
}
if (piece.name == "sgroup")
{
if (
(b4X - piece.transform.position.x < 0.5f && b4X - piece.transform.position.x > -0.5f) &&
(b4Y - piece.transform.position.y < 0.5f && b4Y - piece.transform.position.y > -1.3f) &&
(b4Z - piece.transform.position.z < 0.5f && b4Z - piece.transform.position.z > -0.5f)
)
{
piece.transform.SetParent(b4.transform.parent);
piece.transform.position = new Vector3(b4X - 0.07f, b4Y + 0.7f, b4Z + 0.05f);
clickSFX.Play();
piece.tag = "TempTag";
}
}
if (b6.transform.parent.childCount == 7 && acitve && b7.transform.parent.childCount == 2 && door.transform.parent.childCount == 2 && ai.transform.parent.childCount == 4 && b4.transform.parent.childCount == 2)
{
//Instantiate(menu, GameObject.FindGameObjectWithTag("UI").transform);
acitve = false;
}
else
{
acitve = true;
}
isSelected = false;
}
}
}