點選三維按鈕之射線觸發
1.列出所有按鈕的列舉型別
2.建立指令碼ElectricalCabinetControlGenerator_CabinetButtonManager
3.將對應的按鈕新增該指令碼,並選擇自己對應的列舉型別,並給每個按鈕新增BoxCollider元件,勾選is Trigger
4.建立指令碼管理動畫,按鈕,邏輯等
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
namespace ElectricPower.WindPower
{
public class ElectricalControllerGeneratorManager : MonoBehaviour
{
[SerializeField] private Animator ani_ElectricalCabinet;//整體動畫狀態及
[SerializeField] private GameObject obj_shanye;//扇葉物件
[SerializeField] private Camera thisCamera;//照射發電機控制櫃攝像機
[SerializeField] private GameObject[] obj_Btn_Second;//第二行按鈕(0:啟動,1:停機 2:緊急停機 3:維護 4:重啟 )
[SerializeField] private GameObject[] obj_Btn_Thrid;//第三行按鈕(0:右偏航 1:左偏航 2:開槳 3:閉槳)
[SerializeField] private GameObject obj_Overmaintenance;//結束維護物件
[SerializeField] private GameObject obj_zhangai;//維護物件前面障礙物件
[Header("Bool")] [SerializeField] private bool _isQiDong;//是否開啟啟動 [SerializeField] private bool _isTingJi;//是否開啟停機 [SerializeField] private bool _isJinJi;//緊急停機 [SerializeField] private bool _isguzhangliang;//是否開啟故障(維護) [SerializeField] private bool _isWeihu;//左右偏航開閉槳按鈕可以點選 [SerializeField] private bool _isChongQi;//是否開啟重啟 private bool _isStopMove;//風機是否停止運動 private EnumManager.ElectricControllerButton thisMouseButtonDownButton;//滑鼠按鈕臨時物件 void Start() { ani_ElectricalCabinet.SetTrigger("daiji");//待機燈亮 _isQiDong = true; for (int i = 1; i < obj_Btn_Second.Length; i++) { obj_Btn_Second[i].GetComponent<BoxCollider>().enabled = false;//除啟動按鈕可以點選,其餘不可點選 } } void Update() { if (true) { Ray ray = thisCamera.ScreenPointToRay(Input.mousePosition); RaycastHit rayHit; LayerMask layer = 1 << 17;//射線只打到第17層 if (Physics.Raycast(ray, out rayHit, 1000, layer)) { if (rayHit.collider.name == "weihujieshu") { if (Input.GetMouseButtonDown(0)) { _isguzhangliang = false; } } if (Input.GetMouseButtonDown(0)) { thisMouseButtonDownButton = rayHit.transform.GetComponent<ElectricalCabinetControlGenerator_CabinetButtonManager>().GetButtonEnum(); OnClickEveryBodyButton(thisMouseButtonDownButton, true); Debug.Log("滑鼠點選!!!"); } if (Input.GetMouseButtonUp(0)) { OnClickEveryBodyButton(thisMouseButtonDownButton, false);//為假按鈕播放反動畫 } } else { OnClickEveryBodyButton(EnumManager.ElectricControllerButton.NULL, true); } if (_isguzhangliang) { ShutdownMoveStop(); } } } //待機燈滅 IEnumerator StandBy() { yield return new WaitForSeconds(0.5f); ani_ElectricalCabinet.SetTrigger("fandaiji"); } //停機緩慢停止 public void ShutdownMoveStop() { float x = obj_shanye.GetComponent<MoveAndRotate>().rotateDegreesPerSecond.value.x; x -= 2 * Time.deltaTime; obj_shanye.GetComponent<MoveAndRotate>().rotateDegreesPerSecond.value.x = x; if (x < 0) { x = 0; obj_shanye.GetComponent<MoveAndRotate>().rotateDegreesPerSecond.value.x = x; obj_shanye.GetComponent<MoveAndRotate>().enabled = false; obj_zhangai.SetActive(false); } } //點選按鈕觸發 public void OnClickEveryBodyButton(EnumManager.ElectricControllerButton thisButton, bool isBool) { switch (thisButton) { //啟動 case EnumManager.ElectricControllerButton.Startup: if (_isQiDong) { ani_ElectricalCabinet.SetTrigger("qidong");//按下啟動按鈕 StartCoroutine(StandBy()); //待機燈滅 ani_ElectricalCabinet.SetTrigger("yunxing");//執行燈亮 obj_shanye.GetComponent<MoveAndRotate>().enabled = true;//風扇轉動 obj_shanye.GetComponent<MoveAndRotate>().rotateDegreesPerSecond.value = new Vector3(10.0f, 0, 0); obj_Btn_Second[0].GetComponent<BoxCollider>().enabled = false;//啟動按鈕不可以點選 obj_Btn_Second[1].GetComponent<BoxCollider>().enabled = true;//停機按鈕可以點選 obj_Btn_Second[2].GetComponent<BoxCollider>().enabled = true;//急停按鈕可以點選 _isTingJi = true;//停機開啟 _isJinJi = true; _isQiDong = false; } break; //停機 case EnumManager.ElectricControllerButton.Shutdown: if (_isTingJi) { ani_ElectricalCabinet.SetTrigger("tingji");//按鈕停機按鈕 ani_ElectricalCabinet.SetTrigger("fanyunxing");//執行燈滅 ani_ElectricalCabinet.SetTrigger("guzhang");//故障燈亮 ani_ElectricalCabinet.SetBool("guzhangbool", false);//故障燈滅 obj_Btn_Second[2].GetComponent<BoxCollider>().enabled = false;//急停按鈕不可以點選 obj_Btn_Second[3].GetComponent<BoxCollider>().enabled = true;//維護按鈕可以點選 _isguzhangliang = true;//開啟故障 _isJinJi = false; _isTingJi = false; } break; //緊急停機 case EnumManager.ElectricControllerButton.Emergencystop: if (_isJinJi) { ani_ElectricalCabinet.SetTrigger("jinjiniu");//緊急按鈕 ani_ElectricalCabinet.SetTrigger("fanyunxing");//執行燈滅 ani_ElectricalCabinet.SetTrigger("guzhang");//故障燈亮 ani_ElectricalCabinet.SetBool("guzhangbool", false);//故障燈滅 obj_shanye.GetComponent<MoveAndRotate>().rotateDegreesPerSecond.value.x = 0; obj_Btn_Second[1].GetComponent<BoxCollider>().enabled = false;//停機按鈕不可以點選 obj_Btn_Second[3].GetComponent<BoxCollider>().enabled = true;//維護按鈕可以點選 _isguzhangliang = true;//開啟故障 _isJinJi = false; _isTingJi = false; } break; //維護 case EnumManager.ElectricControllerButton.Maintain: //在故障情況下 if (_isguzhangliang) { _isWeihu = true;//左右偏航開閉槳按鈕可以點選 //ani_ElectricalCabinet.SetTrigger("guzhang");//故障燈亮 ani_ElectricalCabinet.SetTrigger("weihudeng");//維護燈亮 ani_ElectricalCabinet.SetTrigger("weihuniu");//維護按鈕 obj_Overmaintenance.SetActive(true); obj_Btn_Second[3].GetComponent<BoxCollider>().enabled = false;//維護觸發器關閉 Debug.Log("故障燈亮"); } else if (_isguzhangliang == false) { ani_ElectricalCabinet.SetTrigger("fanweihuniu");//維護按鈕關閉 ani_ElectricalCabinet.SetTrigger("fanweihudeng");//維護燈滅 obj_Btn_Second[3].GetComponent<BoxCollider>().enabled = false;//維護觸發器開啟 obj_Btn_Second[4].GetComponent<BoxCollider>().enabled = true;//重啟按鈕可以點選 obj_Overmaintenance.SetActive(false); _isChongQi = true;//重啟按鈕開啟 _isWeihu = false;//左右偏航開閉槳按鈕不可以點選 } break; //重啟 case EnumManager.ElectricControllerButton.Restart: if (_isChongQi) { ani_ElectricalCabinet.SetTrigger("chongqi");//重啟按鈕 ani_ElectricalCabinet.SetTrigger("fanguzhang");//故障燈滅 ani_ElectricalCabinet.SetBool("guzhangbool", true);//故障燈滅 ani_ElectricalCabinet.SetTrigger("daiji");//待機燈亮 obj_Btn_Second[4].GetComponent<BoxCollider>().enabled = false;//重啟按鈕不可以點選 obj_Btn_Second[0].GetComponent<BoxCollider>().enabled = true;//啟動按鈕可以點選 _isQiDong = true; Debug.Log("故障燈滅"); } break; //左偏航 case EnumManager.ElectricControllerButton.Leftyaw: if (_isWeihu && _isguzhangliang) { if (isBool) { ani_ElectricalCabinet.SetTrigger("zuopianhang");//左偏航按鈕 OperationAndCommissioning_ButtonEvent._instance.MouseDownForwardYaw(); } else { ani_ElectricalCabinet.SetTrigger("fanzuopianhang");//左偏航按鈕 } } break; //右偏航 case EnumManager.ElectricControllerButton.Rightyaw: if (_isWeihu && _isguzhangliang) { if (isBool) { OperationAndCommissioning_ButtonEvent._instance.MouseDownAdverseYaw(); ani_ElectricalCabinet.SetTrigger("youpianhang");//右偏航按鈕 } else { ani_ElectricalCabinet.SetTrigger("fanyoupianhang");//右偏航按鈕 } } break; //開槳 case EnumManager.ElectricControllerButton.Pulping: if (_isWeihu && _isguzhangliang) { if (isBool) { OperationAndCommissioning_ButtonEvent._instance.MouseDownOpenFan(); ani_ElectricalCabinet.SetTrigger("kaijiang");//開槳按鈕 } else { ani_ElectricalCabinet.SetTrigger("fankaijiang");//開槳按鈕 } } break; //閉槳 case EnumManager.ElectricControllerButton.Closepulp: if (_isWeihu && _isguzhangliang) { if (isBool) { OperationAndCommissioning_ButtonEvent._instance.MouseDownCloseFan(); ani_ElectricalCabinet.SetTrigger("guanjiang");//閉槳按鈕 } else { ani_ElectricalCabinet.SetTrigger("fanguanjiang");//閉槳按鈕 } } break; case EnumManager.ElectricControllerButton.NULL: break; default: break; } } }
}