using DG.Tweening; using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 螺丝刀 /// public class Screwdriver : MonoBehaviour { /// /// 螺丝刀坐标 /// public Transform ScrewdriverTrans; /// /// 右边螺丝 /// public GameObject ScrewR; /// /// 左边螺丝 /// public GameObject ScrewL; /// /// 集中器左侧螺丝 /// public GameObject LconcentratorScrew; /// /// 集中器右侧螺丝 /// public GameObject RconcentratorScrew; /// /// 集线器外壳螺丝和封印 /// public GameObject[] concentratorScrew; /// /// 螺丝 /// public GameObject[] ScrewObj; /// /// 集线盒电线动画 /// public SkinnedMeshRenderer ElectricWireSMR; /// /// 电线碰撞 /// public BoxCollider ElectricWireBcr; /// /// 集中器盖子 /// public GameObject HubCoverObj; /// /// 集中器后边螺丝 /// public GameObject[] ConcentratorScrewObj; /// /// 集线器物体 /// public Transform ConcentratorObj; /// /// 电线前段胶带 /// public Material TapeMar; public InteractiveObjects[] interactiveObjects; /// /// 拆完封印 /// bool issplit; // Start is called before the first frame update void Start() { Init(); } void Init() { ElectricWireBcr.enabled = false; ElectricWireSMR.SetBlendShapeWeight(0, 0); ElectricWireSMR.SetBlendShapeWeight(1, 0); ElectricWireSMR.SetBlendShapeWeight(2, 0); ElectricWireSMR.SetBlendShapeWeight(3, 0); ElectricWireSMR.SetBlendShapeWeight(4, 0); ElectricWireSMR.SetBlendShapeWeight(5, 0); TapeMar.SetFloat("_step_p1", 0); TapeMar.SetFloat("_step_p2", 0); TapeMar.SetFloat("_step_p3", 0); TapeMar.SetFloat("_step_p4", 0); TapeMar.SetFloat("_step_p5", 0); TapeMar.SetFloat("_step_p6", 0); //TapeMar.SetFloat("_step_p1", 1); } // 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); StartCoroutine(IEHubSegmentRowScrews()); ScrewObj[i].gameObject.SetActive(false); } } if (hit.collider.gameObject.name == "固定螺丝_Rdown") { Debug.Log(hit.collider.gameObject.name); StartCoroutine(IEHubSegmentRowScrews()); ConcentratorScrewObj[0].SetActive(false); ConcentratorScrewObj[1].SetActive(false); } if (hit.collider.gameObject.name == "集电器固定螺丝_Ldown") { Debug.Log(hit.collider.gameObject.name); StartCoroutine(IEHubSegmentRowScrews()); ConcentratorScrewObj[2].SetActive(false); ConcentratorScrewObj[3].SetActive(false); } } } //集中器螺丝全隐藏后播放电线动画 if (AreAllObjectsHidden()&& concentrator.isPlayAni) { StartCoroutine(ScrewdriverBack()); ElectricWireBcr.enabled = true; StartCoroutine(IEElectricWire()); Debug.Log("所有螺丝都已隐藏"); } //集中器外壳上的封印和螺丝 if (AllHubOfHubs()) { HubCoverObj.gameObject.transform.DOLocalMove(new Vector3(0, 0.0167f, -0.2387f),1); Debug.Log("所有集线器盖子螺丝都已隐藏"); } if (ConcentratorScrew()) { StartCoroutine(IEConcentratorScrew()); } } /// /// 集中器螺丝 /// /// public bool AreAllObjectsHidden() { foreach (GameObject obj in ScrewObj) { if (obj.activeInHierarchy) { return false; } } return true; } /// /// 集中器外壳上的封印和螺丝 /// /// public bool AllHubOfHubs() { foreach (GameObject obj in concentratorScrew) { if (obj.activeInHierarchy) { return false; } } return true; } /// /// 集中器后部四颗螺丝 /// /// public bool ConcentratorScrew() { foreach (GameObject obj in ConcentratorScrewObj) { if (obj.activeInHierarchy) { return false; } } return true; } /// /// 螺丝刀返回动画 /// /// IEnumerator ScrewdriverBack() { ScrewdriverTrans.transform.DOLocalMove(new Vector3(3.274139f, 1.803738f, -1.191f), 0.5f); ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-90f, 0, 0), 0.5f); yield return new WaitForSeconds(2f); } /// /// 接线盒右边螺丝 /// /// IEnumerator Rscrew() { ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, 90), 0.5f); yield return new WaitForSeconds(0.6f); 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.2f); ScrewdriverTrans.transform.DOLocalMove(new Vector3(3.191f, 1.831f, -1.158f), 1f); yield return new WaitForSeconds(1.5f); ScrewR.transform.DOLocalMove(new Vector3(0.1316f, 0.036f, 0.0034f), 1.6f); yield return new WaitForSeconds(1.2f); StartCoroutine(ScrewdriverBack()); ScrewR.gameObject.SetActive(false); } /// /// 接线盒左边螺丝 /// /// IEnumerator Lscrew() { ScrewdriverTrans.transform.DOLocalMove(new Vector3(3.2373f, 1.8284f, -1.3885f), 0.5f); yield return new WaitForSeconds(0.6f); ScrewdriverTrans.transform.DOLocalRotate(new Vector3(-19.741f, -113.296f, -104.747f), 1f); yield return new WaitForSeconds(1f); 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(1.2f); StartCoroutine(ScrewdriverBack()); ScrewL.gameObject.SetActive(false); } /// /// 集中器右侧螺丝 /// /// 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); } /// /// 集中器左侧螺丝 /// /// 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); } /// /// 集线器螺丝拆完后电线动画 /// /// IEnumerator IEElectricWire() { //yield return new WaitForSeconds(1f); for (int i = 0; i <= 100; i++) { yield return new WaitForSeconds(0.001f); ElectricWireSMR.SetBlendShapeWeight(0, i); } for (int i = 0; i <= 100; i++) { yield return new WaitForSeconds(0.002f); ElectricWireSMR.SetBlendShapeWeight(1, i); } for (int i = 0; i <= 100; i++) { yield return new WaitForSeconds(0.002f); ElectricWireSMR.SetBlendShapeWeight(2, i); } for (int i = 0; i <= 100; i++) { yield return new WaitForSeconds(0.002f); ElectricWireSMR.SetBlendShapeWeight(3, i); } for (int i = 0; i <= 100; i++) { yield return new WaitForSeconds(0.002f); ElectricWireSMR.SetBlendShapeWeight(4, i); } for (int i = 0; i <= 100; i++) { yield return new WaitForSeconds(0.002f); ElectricWireSMR.SetBlendShapeWeight(5, i); } } /// /// 集中器背后螺丝 /// /// IEnumerator IEConcentratorScrew() { ConcentratorObj.gameObject.transform.DOLocalMove(new Vector3(-0.2719f, 2.24768f, -0.0772f), 0.5f); yield return new WaitForSeconds(1); ConcentratorObj.gameObject.SetActive(false); } /// /// 螺丝刀移动到集中器旁动画 /// /// IEnumerator IEHubSegmentRowScrews() { ScrewdriverTrans.gameObject.transform.DOLocalMove(new Vector3(3.1215f, 2.1383f, -1.3484f),0.5f); yield return new WaitForSeconds(1); } }