ShanxiKnowledgeBase/SXElectricityInformationAcq.../Assets/Screwdriver.cs

289 lines
9.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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