289 lines
9.4 KiB
C#
289 lines
9.4 KiB
C#
using DG.Tweening;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using DefaultNamespace.ProcessMode;
|
||
using MotionFramework;
|
||
using UnityEngine;
|
||
|
||
/// <summary>
|
||
/// 螺丝刀
|
||
/// </summary>
|
||
public class Screwdriver : MonoBehaviour
|
||
{
|
||
/// <summary>
|
||
/// 螺丝刀坐标
|
||
/// </summary>
|
||
public Transform ScrewdriverTrans;
|
||
|
||
/// <summary>
|
||
/// 右边螺丝
|
||
/// </summary>
|
||
public GameObject ScrewR;
|
||
|
||
/// <summary>
|
||
/// 左边螺丝
|
||
/// </summary>
|
||
public GameObject ScrewL;
|
||
|
||
/// <summary>
|
||
/// 集中器左侧螺丝
|
||
/// </summary>
|
||
public GameObject LconcentratorScrew;
|
||
|
||
/// <summary>
|
||
/// 集中器右侧螺丝
|
||
/// </summary>
|
||
public GameObject RconcentratorScrew;
|
||
|
||
/// <summary>
|
||
/// 集线器螺丝和封印
|
||
/// </summary>
|
||
public GameObject[] concentratorScrew;
|
||
|
||
/// <summary>
|
||
/// 螺丝
|
||
/// </summary>a
|
||
public GameObject[] ScrewObj;
|
||
|
||
/// <summary>
|
||
/// 集线盒电线动画
|
||
/// </summary>
|
||
public SkinnedMeshRenderer ElectricWireSMR;
|
||
|
||
/// <summary>
|
||
/// 集中器盖子
|
||
/// </summary>
|
||
public GameObject HubCoverObj;
|
||
|
||
public InteractiveObjects[] interactiveObjects;
|
||
|
||
/// <summary>
|
||
/// 拆完封印
|
||
/// </summary>
|
||
bool issplit;
|
||
|
||
// Start is called before the first frame update
|
||
void Start()
|
||
{
|
||
//StartCoroutine(IEElectricWire());
|
||
}
|
||
|
||
// Update is called once per frame
|
||
void Update()
|
||
{
|
||
if (Input.GetMouseButtonDown(0))
|
||
{//Camera.transform.forward
|
||
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
|
||
RaycastHit hit;
|
||
bool raycast = Physics.Raycast(ray, out hit);
|
||
if (raycast)
|
||
{
|
||
if (hit.collider.gameObject.name == "盖_固定螺丝_Rup")
|
||
{
|
||
StartCoroutine(Rscrew());
|
||
Debug.Log(hit.collider.gameObject.name);
|
||
}
|
||
if (hit.collider.gameObject.name == "固定螺丝_Ldown")
|
||
{
|
||
StartCoroutine(Lscrew());
|
||
Debug.Log(hit.collider.gameObject.name);
|
||
}
|
||
if (hit.collider.gameObject.name == "壳固定螺丝_R")
|
||
{
|
||
Debug.Log(hit.collider.gameObject.name);
|
||
StartCoroutine(IERconcentratorScrew());
|
||
}
|
||
if (hit.collider.gameObject.name == "壳固定螺丝_L")
|
||
{
|
||
Debug.Log(hit.collider.gameObject.name);
|
||
StartCoroutine(IELconcentratorScrew());
|
||
}
|
||
for (int i = 0; i < ScrewObj.Length; i++)
|
||
{
|
||
if (hit.collider.gameObject.name == ScrewObj[i].name)
|
||
{
|
||
Debug.Log(hit.collider.gameObject.name);
|
||
MotionEngine.GetModule<AnimationProcessManager>().HandleClick(hit.collider.gameObject);
|
||
ScrewObj[i].gameObject.SetActive(false);
|
||
}
|
||
//if (!ScrewObj[i].gameObject.activeInHierarchy)
|
||
//{
|
||
// StartCoroutine(IEElectricWire());
|
||
//}
|
||
}
|
||
}
|
||
}
|
||
if (AreAllObjectsHidden())
|
||
{
|
||
StartCoroutine(IEElectricWire());
|
||
Debug.Log("所有螺丝都已隐藏");
|
||
}
|
||
if (AllHubOfHubs())
|
||
{
|
||
HubCoverObj.gameObject.SetActive(false);
|
||
Debug.Log("所有集线器盖子螺丝都已隐藏");
|
||
}
|
||
}
|
||
// 调用这个方法来检查所有游戏对象是否都被隐藏
|
||
// 获取所有游戏对象
|
||
// public GameObject[] allObjects = FindObjectsOfType<GameObject>();
|
||
public bool AreAllObjectsHidden()
|
||
{
|
||
// 检查每个对象的激活状态
|
||
foreach (GameObject obj in ScrewObj)
|
||
{
|
||
if (obj.activeInHierarchy) // 使用 activeInHierarchy 如果你想检查对象是否在其父级结构中被激活
|
||
{
|
||
return false; // 如果找到任何一个激活的对象,返回false
|
||
}
|
||
}
|
||
return true; // 如果所有对象都未激活,返回true
|
||
}
|
||
|
||
/// <summary>
|
||
/// 集中器盖子螺丝
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public bool AllHubOfHubs()
|
||
{
|
||
// 检查每个对象的激活状态
|
||
foreach (GameObject obj in concentratorScrew)
|
||
{
|
||
if (obj.activeInHierarchy) // 使用 activeInHierarchy 如果你想检查对象是否在其父级结构中被激活
|
||
{
|
||
return false; // 如果找到任何一个激活的对象,返回false
|
||
}
|
||
}
|
||
return true; // 如果所有对象都未激活,返回true
|
||
}
|
||
/// <summary>
|
||
/// 螺丝刀返回动画
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
IEnumerator ScrewdriverBack()
|
||
{
|
||
ScrewdriverTrans.transform.DOLocalMove(new Vector3(3.274139f, 1.803738f, -1.191f), 1f);
|
||
ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-90f, 0, 0), 1f);
|
||
yield return new WaitForSeconds(2f);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 接线盒右边螺丝
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
IEnumerator Rscrew()
|
||
{
|
||
ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, 90), 1f);
|
||
yield return new WaitForSeconds(1.5f);
|
||
ScrewdriverTrans.transform.DOLocalMove(new Vector3(3.2373f, 1.8549f, -1.244f), 1f);
|
||
yield return new WaitForSeconds(1);
|
||
ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, -104.747f), 1f);
|
||
yield return new WaitForSeconds(1.5f);
|
||
ScrewdriverTrans.transform.DOLocalMove(new Vector3(3.191f, 1.831f, -1.158f), 1f);
|
||
yield return new WaitForSeconds(2f);
|
||
ScrewR.transform.DOLocalMove(new Vector3(0.1316f, 0.036f, 0.0034f), 1.5f);
|
||
yield return new WaitForSeconds(3f);
|
||
StartCoroutine(ScrewdriverBack());
|
||
ScrewR.gameObject.SetActive(false);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 接线盒左边螺丝
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
IEnumerator Lscrew()
|
||
{
|
||
ScrewdriverTrans.transform.DOLocalMove(new Vector3(3.2373f, 1.8284f, -1.3885f), 1f);
|
||
yield return new WaitForSeconds(1.5f);
|
||
ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, -104.747f), 1f);
|
||
yield return new WaitForSeconds(1.5f);
|
||
ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, 90), 1f);
|
||
yield return new WaitForSeconds(1.5f);
|
||
ScrewL.transform.DOLocalMove(new Vector3(-0.07357633f, -0.01137948f, -0.0366f), 1f);
|
||
yield return new WaitForSeconds(2f);
|
||
StartCoroutine(ScrewdriverBack());
|
||
ScrewL.gameObject.SetActive(false);
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 集中器右侧螺丝
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
IEnumerator IERconcentratorScrew()
|
||
{
|
||
ScrewdriverTrans.transform.DOLocalMove(new Vector3(3.2669f, 2.0962f, -1.3294f), 1f);
|
||
yield return new WaitForSeconds(1.5f);
|
||
ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, -104.747f), 1f);
|
||
yield return new WaitForSeconds(1.5f);
|
||
ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, 90), 1f);
|
||
yield return new WaitForSeconds(1.5f);
|
||
RconcentratorScrew.transform.DOLocalMove(new Vector3(0.1143f, 0.0216f, -0.1031f), 1f);
|
||
yield return new WaitForSeconds(0.5f);
|
||
StartCoroutine(ScrewdriverBack());
|
||
RconcentratorScrew.gameObject.SetActive(false);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 集中器左侧螺丝
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
IEnumerator IELconcentratorScrew()
|
||
{
|
||
ScrewdriverTrans.transform.DOLocalMove(new Vector3(3.2669f, 2.0962f, -1.4616f), 1f);
|
||
yield return new WaitForSeconds(1.5f);
|
||
ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, -104.747f), 1f);
|
||
yield return new WaitForSeconds(1.5f);
|
||
ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, 90), 1f);
|
||
yield return new WaitForSeconds(1.5f);
|
||
LconcentratorScrew.transform.DOLocalMove(new Vector3(-0.1188f, 0.0216f, -0.1031f), 1f);
|
||
yield return new WaitForSeconds(2f);
|
||
StartCoroutine(ScrewdriverBack());
|
||
LconcentratorScrew.gameObject.SetActive(false);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 集线器螺丝拆完后电线动画
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
IEnumerator IEElectricWire()
|
||
{
|
||
//yield return new WaitForSeconds(1f);
|
||
for (int i = 0; i <= 100; i++)
|
||
{
|
||
yield return new WaitForSeconds(0.001f);
|
||
ElectricWireSMR.SetBlendShapeWeight(0, i);
|
||
}
|
||
//yield return new WaitForSeconds(1f);
|
||
for (int i = 0; i <= 100; i++)
|
||
{
|
||
yield return new WaitForSeconds(0.002f);
|
||
ElectricWireSMR.SetBlendShapeWeight(1, i);
|
||
}
|
||
//yield return new WaitForSeconds(1f);
|
||
for (int i = 0; i <= 100; i++)
|
||
{
|
||
yield return new WaitForSeconds(0.002f);
|
||
ElectricWireSMR.SetBlendShapeWeight(2, i);
|
||
}
|
||
//yield return new WaitForSeconds(1f);
|
||
for (int i = 0; i <= 100; i++)
|
||
{
|
||
yield return new WaitForSeconds(0.002f);
|
||
ElectricWireSMR.SetBlendShapeWeight(3, i);
|
||
}
|
||
//yield return new WaitForSeconds(1f);
|
||
for (int i = 0; i <= 100; i++)
|
||
{
|
||
yield return new WaitForSeconds(0.002f);
|
||
ElectricWireSMR.SetBlendShapeWeight(4, i);
|
||
}
|
||
//yield return new WaitForSeconds(1f);
|
||
for (int i = 0; i <= 100; i++)
|
||
{
|
||
yield return new WaitForSeconds(0.002f);
|
||
ElectricWireSMR.SetBlendShapeWeight(5, i);
|
||
}
|
||
}
|
||
}
|