点击三维按钮之射线触发
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;
}
}
}
}