点击三维按钮之射线触发

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

}

posted @ 2020-11-27 13:59  一路繁华的夏ˇ  阅读(96)  评论(0)    收藏  举报