AR开发实战AR项目之液压元件培训系统

一、框架图

二、关键脚本

MainBtnCtrl

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class MainBtnCtrl : MonoBehaviour
{

    public Texture selectSp;
    public Texture unSelectSp;

    private  string btnTag;


    private void Awake()
    {
        btnTag = gameObject.transform.tag;
        ConfirmIdentity();


        gameObject.transform.GetComponent<Button>().onClick.AddListener(() => {
            EventCenter.Broadcast(EventDefine.MainBtnClick_A, btnTag);
      
        });

        EventCenter.AddListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
    }


    void Start()
    {
        
    }


    private void MainBtnClickHandle(string arg)
    {

        if (arg ==btnTag)
        {
            gameObject.transform.GetChild(1).GetComponent<RawImage>().texture = selectSp;
            gameObject.transform.GetChild(2).gameObject.SetActive(true);
            GameUIManager_A.Instance.SetCurrentMainBtnState(btnTag);
            EventCenter.Broadcast(EventDefine.MainBtnClick_A_GoState, btnTag);
        }
        else
        {
            gameObject.transform.GetChild(1).GetComponent<RawImage>().texture = unSelectSp;
            gameObject.transform.GetChild(2).gameObject.SetActive(false);

        }
    }


    public void ConfirmIdentity()
    {

        if (PlayerPrefs.GetInt("userType") == 0)
        {
            if (btnTag == Tags.AdminBtn)
            {
                gameObject.SetActive(false);
            }
        }
        else if (PlayerPrefs.GetInt("userType") == 1)
        {
            if (btnTag == Tags.AdminBtn)
            {
                gameObject.SetActive(true);
            }
        }
    }



    private void OnDestroy()
    {
        EventCenter.RemoveListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
    }

}

NormalBtnCtrl

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class NormalBtnCtrl : MonoBehaviour
{

    string btnTag;
    Image icon;
    Color color;

    private void Awake()
    {
        btnTag = gameObject.transform.tag;
        icon = GetComponent<Image>();
        gameObject.transform.GetComponent<Button>().onClick.AddListener(() => {
            EventCenter.Broadcast(EventDefine.NormalBtnClick_A, btnTag);

        });

        EventCenter.AddListener<string>(EventDefine.NormalBtnClick_A, NormalBtnClickHandle);
        EventCenter.AddListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
    }

    void Start()
    {       
    }

    private void NormalBtnClickHandle(string arg)
    {

        if (arg == btnTag)
        {
            ColorUtility.TryParseHtmlString("#ff743a", out color);
            icon.color = color;
            transform.GetChild(0).GetComponent<Text>().color = Color.white;
            GameUIManager_A.Instance.SetCurrentNormalBtnState(btnTag);
                   
        }
        else
        {
            ColorUtility.TryParseHtmlString("#ffffff", out color);
            icon.color = color;
            transform.GetChild(0).GetComponent<Text>().color = Color.black;
     
        }
        EventCenter.Broadcast(EventDefine.NormalBtnClick_A_GoState, arg);
    }

    private void MainBtnClickHandle(string arg)
    {


        if (btnTag.Trim() == Tags.HydraulicLock.Trim())
        {
            GameUIManager_A.Instance.SetCurrentNormalBtnState(btnTag);
            ColorUtility.TryParseHtmlString("#ff743a", out color);
            icon.color = color;
            transform.GetChild(0).GetComponent<Text>().color = Color.white;
           
        }
        else
        {
            ColorUtility.TryParseHtmlString("#ffffff", out color);
            icon.color = color;
            transform.GetChild(0).GetComponent<Text>().color = Color.black;
          
        }
    }

    private void OnDestroy()
    {
        EventCenter.RemoveListener<string>(EventDefine.NormalBtnClick_A, NormalBtnClickHandle);
        EventCenter.RemoveListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
    }

}


FunctionalPrinciplePanel

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Video;
using UnityEngine.UI;

public class FunctionalPrinciplePanel : MonoBehaviour
{

    [HideInInspector]
    public  VideoPlayer videoPlayer;
    private RawImage rawImage;
    [HideInInspector]
    public Texture pingBao;           
    private string FunVideoPath="Function/HydraulicLock_Fun";

    public Slider videoTimeSlider;     
    private bool isPlay = true;          
    public Button playPauseButton;       

    void Start()
    {

        videoPlayer = this.transform.GetChild(1).GetComponent<VideoPlayer>();
        rawImage = this.transform.GetChild(1).GetComponent<RawImage>();
        videoPlayer.isLooping = true;
         videoPlayer.loopPointReached += EndReached;
        videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
        videoPlayer.SetTargetAudioSource(0, this.transform.GetChild(1).GetComponent<AudioSource>());
        videoPlayer.playOnAwake = false;
        videoPlayer.IsAudioTrackEnabled(0);
        PlayAnimatorVideo_Fun(FunVideoPath);

        playPauseButton.onClick.AddListener(PlayOrPause); 
     

        EventCenter.AddListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
        EventCenter.AddListener<string>(EventDefine.NormalBtnClick_A, NormalBtnClickHandle);
        EventCenter.AddListener(EventDefine.ExitBtn,VideoStop);
    }


    private void EndReached(VideoPlayer source)
    {
        videoTimeSlider.value = 0;
    }

    private void VideoStop()
    {
        StopAllCoroutines();
        videoPlayer.Stop();
        videoTimeSlider.gameObject.SetActive(false);

    }



    private void NormalBtnClickHandle(string normalBtnTag)
    {
        if (GameUIManager_A.Instance.currentMainBtnState==MainBtnStateEnum.FunBtn)
        {
            switch (normalBtnTag)
            {
                case "HydraulicLock":
                    FunVideoPath = "Function/HydraulicLock_Fun";
                    break;
                case "BalancingValve":
                    FunVideoPath = "Function/BalancingValve_Fun";
                    break;
                case "OilCylinder":
                    FunVideoPath = "Function/OilCylinder_Fun";
                    break;
                case "GearPump":
                    FunVideoPath = "Function/GearPump_Fun";
                    break;
                default:
                    break;
            }

            PlayAnimatorVideo_Fun(FunVideoPath);
        }
    }


    private void MainBtnClickHandle(string mainBtnTag)
    {
        if (mainBtnTag == Tags.FunBtn)
        {
            gameObject.SetActive(true);
            videoPlayer.Stop();
            FunVideoPath = "Function/HydraulicLock_Fun";
            PlayAnimatorVideo_Fun(FunVideoPath);
        }
        else{
            videoPlayer.Stop();
            gameObject.SetActive(false);
        }
           
    }


    private void PlayAnimatorVideo_Fun(string arg)
    {
        videoPlayer.Stop();
        PlayVideo_Animator(arg);
       
    }


    private void PlayVideo_Animator(string arg)
    {
        this.transform.GetChild(1).gameObject.SetActive(true);
        this.transform.GetChild(1).gameObject.transform.GetComponent<RawImage>().enabled = false;
        videoPlayer.clip = Resources.Load<VideoClip>("Video/" + arg);
        videoPlayer.Prepare();
        videoPlayer.prepareCompleted += VideoPlayer_prepareCompleted;  


       
    }

  

    private void VideoPlayer_prepareCompleted(VideoPlayer source)
    {
        this.transform.GetChild(1).gameObject.transform.GetComponent<RawImage>().enabled = true;
        videoPlayer.Play();
    }


    void PlayOrPause()
    {

        if (videoPlayer.clip != null && (ulong)videoPlayer.frame < videoPlayer.frameCount)
        {

            if (isPlay)
            {

                videoPlayer.Pause();
                isPlay = false;
            }
            else
            {

                videoPlayer.Play();
                isPlay = true;
            }
        }
    }


    void Update()
    {

        if (videoPlayer.texture == null)
        {

            return;
        }

        rawImage.texture = videoPlayer.texture;
        videoTimeSlider.value = (float)(videoPlayer.time / videoPlayer.clip.length);

    }

    private void OnDestroy()
    {
        EventCenter.RemoveListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
        EventCenter.RemoveListener<string>(EventDefine.NormalBtnClick_A, NormalBtnClickHandle);
        EventCenter.RemoveListener(EventDefine.ExitBtn, VideoStop);
    }
}

StructureShowPanel

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StructureShowPanel : MonoBehaviour
{
    
    void Start()
    {
        gameObject.SetActive(false);
        EventCenter.AddListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
    }



    private void MainBtnClickHandle(string mainBtnTag)
    {
        if (mainBtnTag == Tags.StrucBtn)
        {
            gameObject.SetActive(true);
          
        }
        else
        {
            gameObject.SetActive(false);
        }

    }


    private void OnDestroy()
    {
        EventCenter.RemoveListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
    }
}

DismantInstallGuidePanel

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Video;
using UnityEngine.UI;
using System;

public class DismantInstallGuidePanel : MonoBehaviour
{

    [HideInInspector]
    public   VideoPlayer videoPlayer;
    private  RawImage rawImage;
    [HideInInspector]
    public Texture pingBao;         
    private   string DIVideoPath = "Guide/HydraulicLock_Gui_Install";

    public Slider videoTimeSlider;      
    private bool isPlay = true;        
    public Button playPauseButton;       

    private void Awake()
    {
            
    }


    void Start()
    {
        gameObject.SetActive(false);
        videoPlayer = this.transform.GetChild(1).GetComponent<VideoPlayer>();
        rawImage = this.transform.GetChild(1).GetComponent<RawImage>();
        videoPlayer.isLooping = true;
         videoPlayer.loopPointReached += EndReached;
        videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
        videoPlayer.SetTargetAudioSource(0, this.transform.GetChild(1).GetComponent<AudioSource>());
        videoPlayer.playOnAwake = false;
        videoPlayer.IsAudioTrackEnabled(0);
        PlayAnimatorVideo_Guide(DIVideoPath);

        playPauseButton.onClick.AddListener(PlayOrPause); 

        EventCenter.AddListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
        EventCenter.AddListener<string>(EventDefine.NormalBtnClick_A, NormalBtnClickHandle);
        EventCenter.AddListener<string, string>(EventDefine.DismantInstallBtnClick_A, DismantInstallBtnClickHandle);
        EventCenter.AddListener(EventDefine.ExitBtn, VideoStop);
    }



    void PlayOrPause()
    {
        if (videoPlayer.clip != null && (ulong)videoPlayer.frame < videoPlayer.frameCount)
        {
            if (isPlay)
            {
                //  playPauseButton.image.sprite = pause;
                videoPlayer.Pause();
                isPlay = false;
            }
            else
            {
                // playPauseButton.image.sprite = play;
                videoPlayer.Play();
                isPlay = true;
            }
        }
    }


    private void VideoStop()
    {
        StopAllCoroutines();
        videoPlayer.Stop();
        videoTimeSlider.gameObject.SetActive(false);
    }


    /// <param name="source"></param>
    private void EndReached(VideoPlayer source)
    {
        videoTimeSlider.value = 0;
    }

    private void DismantInstallBtnClickHandle(string argbtnTag, string argVideoPath)
    {
        videoPlayer.Stop();
        videoPlayer.clip = Resources.Load<VideoClip>("Video/" + argVideoPath);
        videoPlayer.Play();
    }


    private void NormalBtnClickHandle(string normalBtnTag)
    {
        if (GameUIManager_A.Instance.currentMainBtnState == MainBtnStateEnum.GuideBtn)
        {
            switch (normalBtnTag)
            {
                case "HydraulicLock":
                    DIVideoPath = "Guide/HydraulicLock_Gui_Install";
                    break;
                case "BalancingValve":
                    DIVideoPath = "Guide/BalancingValve_Gui_Install";
                    break;
                case "OilCylinder":
                    DIVideoPath = "Guide/OilCylinder_Gui_Install";
                    break;
                case "GearPump":
                    DIVideoPath = "Guide/GearPump_Gui_Install";
                    break;
                default:
                    break;
            }

            PlayAnimatorVideo_Guide(DIVideoPath);
        }
    }


    private void MainBtnClickHandle(string mainBtnTag)
    {
       // Debug.Log("mainBtnTag"+ mainBtnTag);
        if (mainBtnTag == Tags.GuideBtn)
        {
            gameObject.SetActive(true);
            videoPlayer.Stop();
            DIVideoPath = "Guide/HydraulicLock_Gui_Install";
            PlayAnimatorVideo_Guide(DIVideoPath);
        }
        else
        {
            videoPlayer.Stop();
            gameObject.SetActive(false);
        }

    }


    private void PlayAnimatorVideo_Guide(string arg)
    {
        videoPlayer.Stop();
        PlayVideo_Animator(arg);

    }


    private void PlayVideo_Animator(string arg)
    {
        this.transform.GetChild(1).gameObject.SetActive(true);
        this.transform.GetChild(1).gameObject.transform.GetComponent<RawImage>().enabled = false;
        videoPlayer.clip = Resources.Load<VideoClip>("Video/" + arg);
        videoPlayer.Prepare();
        videoPlayer.prepareCompleted += VideoPlayer_prepareCompleted; 
        videoPlayer.frame += 100;

    }

    private void VideoPlayer_prepareCompleted(VideoPlayer source)
    {
        this.transform.GetChild(1).gameObject.transform.GetComponent<RawImage>().enabled = true;
        videoPlayer.Play();
    }


    void Update()
    {

        if (videoPlayer.texture == null)
        {
            return;
        }

        rawImage.texture = videoPlayer.texture;
        videoTimeSlider.value = (float)(videoPlayer.time / videoPlayer.clip.length);

    }

    private void OnDestroy()
    {
        EventCenter.RemoveListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
        EventCenter.RemoveListener<string>(EventDefine.NormalBtnClick_A, NormalBtnClickHandle);
        EventCenter.AddListener<string, string>(EventDefine.DismantInstallBtnClick_A, DismantInstallBtnClickHandle);
        EventCenter.RemoveListener(EventDefine.ExitBtn, VideoStop);

    }
}

DismantInstallTrainPanel

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DismantInstallTrainPanel : MonoBehaviour
{
   
    void Start()
    {
        gameObject.SetActive(false);
        EventCenter.AddListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
  
    }



    private void MainBtnClickHandle(string mainBtnTag)
    {
        if (mainBtnTag == Tags.TrainBtn)
        {
            gameObject.SetActive(true);

        }
        else
        {

            gameObject.SetActive(false);
        }

    }


    private void OnDestroy()
    {
        EventCenter.RemoveListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
    }
}

AnalysisDiagnosisPanel

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;


public class AnalysisDiagnosisPanel : MonoBehaviour {


    [HideInInspector]
    public  VideoPlayer videoPlayer;
    private RawImage rawImage;
    [HideInInspector]
    public Texture pingBao;           
    private string videoPath = "Analy/HydraulicLock_Fault";

    public Slider videoTimeSlider;     
    private bool isPlay = true;         
    public Button playPauseButton;       

    public GameObject enterExit;

    void Start()
    {
        gameObject.SetActive(false);
        videoPlayer = this.transform.GetChild(1).GetComponent<VideoPlayer>();
        rawImage = this.transform.GetChild(1).GetComponent<RawImage>();
        videoPlayer.isLooping = true;
          videoPlayer.loopPointReached += EndReached;
        videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
        videoPlayer.SetTargetAudioSource(0, this.transform.GetChild(1).GetComponent<AudioSource>());
        videoPlayer.playOnAwake = false;
        videoPlayer.IsAudioTrackEnabled(0);
        PlayAnimatorVideo_Analy(videoPath);

        playPauseButton.onClick.AddListener(PlayOrPause); 

        EventCenter.AddListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
        EventCenter.AddListener<string>(EventDefine.NormalBtnClick_A, NormalBtnClickHandle);
        EventCenter.AddListener<string>(EventDefine.PlayAnimVideo_Analy, PlayAnimatorVideo_Analy);

        EventCenter.AddListener(EventDefine.ExitBtn, VideoStop);

    }


    private void EndReached(VideoPlayer source)
    {
        videoTimeSlider.value = 0;
    }

    private void VideoStop()
    {
        StopAllCoroutines();
        videoPlayer.Stop();
        videoTimeSlider.gameObject.SetActive(false);

    }



    private void MainBtnClickHandle(string mainBtnTag)
    {

        if (mainBtnTag == Tags.AnalyBtn)
        {
            gameObject.SetActive(true);
            videoPlayer.Stop();
            videoPath = "Analy/HydraulicLock_Fault";
            PlayAnimatorVideo_Analy(videoPath);
            enterExit.SetActive(true);
        }
        else
        {
            videoPlayer.Stop();
            gameObject.SetActive(false);
        }

    }

    private void NormalBtnClickHandle(string normalBtnTag)
    {
        if (GameUIManager_A.Instance.currentMainBtnState == MainBtnStateEnum.AnalyBtn)
        {
            switch (normalBtnTag)
            {
                case "HydraulicLock":
                    videoPath = "Analy/HydraulicLock_Fault";
                    PlayAnimatorVideo_Analy(videoPath);
                    enterExit.SetActive(true);
                    break;
                case "BalancingValve":
                    videoPath = "Analy/BalancingValve_Fault";
                    PlayAnimatorVideo_Analy(videoPath);
                    enterExit.SetActive(true);
                    break;
                case "OilCylinder":
                    videoPlayer.Stop();
                    enterExit.SetActive(false);
                    break;
                case "GearPump":
                    videoPlayer.Stop();
                    enterExit.SetActive(false);
                    break;
                default:
                    break;
            }

           
        }
    }


    private void PlayAnimatorVideo_Analy(string arg)
    {
        videoPlayer.Stop();
        PlayVideo_Animator(arg);

    }


    private void PlayVideo_Animator(string arg)
    {
        this.transform.GetChild(1).gameObject.SetActive(true);
        this.transform.GetChild(1).gameObject.transform.GetComponent<RawImage>().enabled = false;
        videoPlayer.clip = Resources.Load<VideoClip>("Video/" + arg);
        videoPlayer.Prepare();
        videoPlayer.prepareCompleted += VideoPlayer_prepareCompleted;  
        videoPlayer.frame += 100;

    }

    private void VideoPlayer_prepareCompleted(VideoPlayer source)
    {
        this.transform.GetChild(1).gameObject.transform.GetComponent<RawImage>().enabled = true;
        videoPlayer.Play();
    }


    void PlayOrPause()
    {
        if (videoPlayer.clip != null && (ulong)videoPlayer.frame < videoPlayer.frameCount)
        {
            if (isPlay)
            {
                //  playPauseButton.image.sprite = pause;
                videoPlayer.Pause();
                isPlay = false;
            }
            else
            {
                // playPauseButton.image.sprite = play;
                videoPlayer.Play();
                isPlay = true;
            }
        }
    }


    void Update()
    {
        if (videoPlayer.texture == null)
        {
            return;
        }
        rawImage.texture = videoPlayer.texture;

        videoTimeSlider.value = (float)(videoPlayer.time / videoPlayer.clip.length);

    }

   

    private void OnDestroy()
    {

        EventCenter.RemoveListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
        EventCenter.RemoveListener<string>(EventDefine.NormalBtnClick_A, NormalBtnClickHandle);
        EventCenter.RemoveListener<string>(EventDefine.PlayAnimVideo_Analy, PlayAnimatorVideo_Analy);

        EventCenter.RemoveListener(EventDefine.ExitBtn, VideoStop);
    }

}

ExaminationSystemPanel

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ExaminationSystemPanel : MonoBehaviour
{
    void Start()
    {

        gameObject.SetActive(false);
        EventCenter.AddListener<string>(EventDefine.MainBtnClick_A, Show);
    }



    private void Show(string btnName)
    {
        if (btnName ==Tags.ExamBtn)
        {
            gameObject.SetActive(true);

        }
        else
        {
            gameObject.SetActive(false);

        }
    }

}

AdministratorPanel
···
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AdministratorPanel : MonoBehaviour
{
void Start()
{
ConfirmIdentity();
gameObject.SetActive(false);
EventCenter.AddListener<string>(EventDefine.MainBtnClick_A, Show);
}

private void Show(string btnName)
{
    if (btnName == Tags.AdminBtn)
    {
        gameObject.SetActive(true);

    }
    else
    {
        gameObject.SetActive(false);

    }
}



public void ConfirmIdentity()
{

    if (PlayerPrefs.GetInt("userType") == 0)
    {
       
            gameObject.SetActive(false);
       
    }
    else if (PlayerPrefs.GetInt("userType") == 1)
    {
        
            gameObject.SetActive(true);
        
    }
}

private void OnDestroy()
{
    EventCenter.RemoveListener<string>(EventDefine.MainBtnClick_A, Show);
}

}

···

ExamUI
···
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ExamUI : MonoBehaviour {

void Start()
{
    gameObject.SetActive(false);
    EventCenter.AddListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);

}

private void MainBtnClickHandle(string arg)
{
    if (arg == Tags.ExamBtn)
    {
        gameObject.SetActive(true);
    }
    else
    {
        gameObject.SetActive(false);
    }
}

private void OnDestroy()
{
    EventCenter.RemoveListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
}

}

···
GameUIManager_A
···
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public enum MainBtnStateEnum
{

FunBtn,
StrucBtn,
GuideBtn,
TrainBtn,
AnalyBtn,
ExamBtn,

}

public enum NormalBtnStateEnum
{

HydraulicLockBtn,
BalancingValveBtn,
OilCylinderBtn,
GearPumpBtn,

}

public enum TrainBtnStateEnum
{
None,
StrengthState,
FreeState,

}

public enum ExamBtnStateEnum
{
BeforeExam,
BackExam,
}

public class GameUIManager_A : MonoBehaviour
{

public static GameUIManager_A Instance;

void Awake()
{
    Instance = this;
}

public MainBtnStateEnum currentMainBtnState = MainBtnStateEnum.FunBtn;
public NormalBtnStateEnum currentNormalBtnState = NormalBtnStateEnum.HydraulicLockBtn;
public TrainBtnStateEnum currentTrainState = TrainBtnStateEnum.StrengthState;
public ExamBtnStateEnum currentExamState = ExamBtnStateEnum.BeforeExam;


public  bool isPause = false; 

private void Start()
{
    
}

private void Update()
{

    
}


private void OnMouseDown()
{
    
}


public void SetCurrentMainBtnState(string mainBtnTag) {
    switch (mainBtnTag)
    {
        case "FunBtn":
            currentMainBtnState = MainBtnStateEnum.FunBtn;
            break;
        case "StrucBtn":
            currentMainBtnState = MainBtnStateEnum.StrucBtn;
            break;
        case "GuideBtn":
            currentMainBtnState = MainBtnStateEnum.GuideBtn;
            break;
        case "TrainBtn":
            currentMainBtnState = MainBtnStateEnum.TrainBtn;
            break;
        case "AnalyBtn":
            currentMainBtnState = MainBtnStateEnum.AnalyBtn;
            break;
        case "ExamBtn":
            currentMainBtnState = MainBtnStateEnum.ExamBtn;
            break;
        default:
            break;
    }

}


public void SetCurrentNormalBtnState(string normalBtnTag) {

    switch (normalBtnTag)
    {
        case "HydraulicLock":
            currentNormalBtnState = NormalBtnStateEnum.HydraulicLockBtn;
            break;
        case "BalancingValve":
            currentNormalBtnState = NormalBtnStateEnum.BalancingValveBtn;
            break;
        case "OilCylinder":
            currentNormalBtnState = NormalBtnStateEnum.OilCylinderBtn;
            break;
        case "GearPump":
            currentNormalBtnState = NormalBtnStateEnum.GearPumpBtn;
            break;
        default:
            break;
    }

}

}

···

GameManager
···
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
public static GameManager Instance;

private void Awake()
{
    Instance = this;
}


public Stack<int> itemIDStack = new Stack<int>(); 

void Start()
{
    EventCenter.AddListener(EventDefine.ReStartBtn, ReStartBtnHandle); 
}

private void ReStartBtnHandle()
{
    itemIDStack = new Stack<int>();
}

private void ChildBtnClick_TrainHandle(string arg)
{
    itemIDStack = new Stack<int>();
}

private void MainBtnClickHandle(string arg)
{
    itemIDStack = new Stack<int>();
}


public void PushItemId(int id) {

    itemIDStack.Push(id);
}


public int PopItemId() {

    if (itemIDStack.Count>0)
    {
        int itemId = itemIDStack.Pop();
        return itemId;
    }

    return 1;
}


public void ExitApp()
{
    Debug.Log("Exit");

    EventCenter.Broadcast(EventDefine.ExitBtn);

    StartCoroutine(StopVideo());
}

IEnumerator StopVideo()
{
    yield return new WaitForFixedUpdate();

    Application.Quit();


}






private void OnDestroy()
{
    EventCenter.RemoveListener(EventDefine.ReStartBtn, ReStartBtnHandle); 
}

}

···
GoCtrl
···
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class GoCtrl : MonoBehaviour
{
public float amplification1;
public float amplification2;
public float shrink1;
public float shrink2;

string goTag;

string nomalBtnTag;

private Quaternion quaternion; 

private void Awake()
{
    goTag = transform.tag;
    quaternion = gameObject.transform.localRotation;



}

void Start()
{
    gameObject.SetActive(false);

   
    EventCenter.AddListener<string>(EventDefine.MainBtnClick_A_GoState, MainBtnClickHandle); 
    EventCenter.AddListener<string>(EventDefine.NormalBtnClick_A_GoState, NormalBtnClickHandle_GoState); 
    EventCenter.AddListener<string>(EventDefine.StructureShowBtnClick_A, StructureShowBtnClickHandle);

    EventCenter.AddListener<string>(EventDefine.ChildBtnClick_Train, ChildBtnClick_TrainHandle);

    EventCenter.AddListener<bool>(EventDefine.AmplificationBtn, Amplification); 
    EventCenter.AddListener<bool>(EventDefine.ShrinkBtn, Shrink);
    EventCenter.AddListener<bool>(EventDefine.RotateBtn, Roate); 


    EventCenter.AddListener(EventDefine.IknowBtn_Strength, IknowBtn_StrengthHandle);
    EventCenter.AddListener(EventDefine.IknowBtn_Free, IknowBtn_FreeHandle);

    EventCenter.AddListener(EventDefine.ReStartBtn, ReStartBtnHandle);
}



private void OnDestroy()
{
    EventCenter.RemoveListener<string>(EventDefine.MainBtnClick_A_GoState, MainBtnClickHandle);
    EventCenter.RemoveListener<string>(EventDefine.NormalBtnClick_A_GoState, NormalBtnClickHandle_GoState); 
    EventCenter.RemoveListener<string>(EventDefine.StructureShowBtnClick_A, StructureShowBtnClickHandle); 
    EventCenter.RemoveListener<string>(EventDefine.ChildBtnClick_Train, ChildBtnClick_TrainHandle);

    EventCenter.RemoveListener<bool>(EventDefine.AmplificationBtn, Amplification); 
    EventCenter.RemoveListener<bool>(EventDefine.ShrinkBtn, Shrink);
    EventCenter.RemoveListener<bool>(EventDefine.RotateBtn, Roate); 
    EventCenter.RemoveListener(EventDefine.IknowBtn_Strength, IknowBtn_StrengthHandle);
    EventCenter.RemoveListener(EventDefine.IknowBtn_Free, IknowBtn_FreeHandle);

    EventCenter.RemoveListener(EventDefine.ReStartBtn, ReStartBtnHandle);
}
private void ReStartBtnHandle()
{
   

    switch (GameUIManager_A.Instance.currentNormalBtnState)
    {
        case NormalBtnStateEnum.HydraulicLockBtn:
            nomalBtnTag = Tags.HydraulicLock;
            break;
        case NormalBtnStateEnum.BalancingValveBtn:
            nomalBtnTag = Tags.BalancingValve;
            break;
        case NormalBtnStateEnum.OilCylinderBtn:
            nomalBtnTag = Tags.OilCylinder;
            break;
        case NormalBtnStateEnum.GearPumpBtn:
            nomalBtnTag = Tags.GearPump;
            break;
        default:
            break;
    }

    if (nomalBtnTag == goTag)
    {
        gameObject.SetActive(true);
    }
    else
    {
        gameObject.SetActive(false);
    }



}

private void ChildBtnClick_TrainHandle(string arg)
{
    if (arg == "HydraulicLockBtn__Train")
    {
        gameObject.SetActive(true);
        ResetGo();
    }
    else
    {
        gameObject.SetActive(false);
    }
}

private void IknowBtn_FreeHandle()
{
    if (GameUIManager_A.Instance.currentNormalBtnState == NormalBtnStateEnum.HydraulicLockBtn)
    {
        gameObject.SetActive(true);
    }
}

private void IknowBtn_StrengthHandle()
{
    if (GameUIManager_A.Instance.currentNormalBtnState == NormalBtnStateEnum.HydraulicLockBtn)
    {
        gameObject.SetActive(true);
    }
}


private void StructureShowBtnClickHandle(string arg)
{
    if (arg ==Tags.MassiveStructureBtn)
    {
        switch (GameUIManager_A.Instance.currentNormalBtnState)
        {
            case NormalBtnStateEnum.HydraulicLockBtn:
                nomalBtnTag = Tags.HydraulicLock;
                break;
            case NormalBtnStateEnum.BalancingValveBtn:
                nomalBtnTag = Tags.BalancingValve;
                break;
            case NormalBtnStateEnum.OilCylinderBtn:
                nomalBtnTag = Tags.OilCylinder;
                break;
            case NormalBtnStateEnum.GearPumpBtn:
                nomalBtnTag = Tags.GearPump;
                break;
            default:
                break;
        }
       // Debug.Log(" nomalBtnTag ::" + nomalBtnTag);
        if (nomalBtnTag==goTag)
        {
            gameObject.SetActive(true);
        }
        else
        {
            gameObject.SetActive(false);
        }

    }
    else
    {
        gameObject.SetActive(false);
    }
}

private void MainBtnClickHandle(string arg)
{
 
    ResetGo();
   
    gameObject.SetActive(false);


}

private void NormalBtnClickHandle_GoState(string normalBtnTag)
{

    ResetGo();

 
    if (GameUIManager_A.Instance.currentMainBtnState == MainBtnStateEnum.TrainBtn)
    {

        if (goTag == normalBtnTag)
        {
            
            gameObject.SetActive(true);
        }
        else
        {
            gameObject.SetActive(false);
        }
    }
    else
    {
        gameObject.SetActive(false);
    }


}


void ResetGo()
{
    gameObject.transform.localScale = Vector3.one;
    gameObject.transform.localRotation = quaternion;
    gameObject.transform.GetComponent<RoateObject>().enabled = false;
}



private void Roate(bool arg)
{
    if (arg)
    {
        gameObject.transform.GetComponent<RoateObject>().enabled = true;
    }
    else
    {
        gameObject.transform.GetComponent<RoateObject>().enabled = false;
        gameObject.transform.DORotateQuaternion(quaternion, 1.5f);
    }
}


private void Shrink(bool arg)
{
    if (arg)
    {
        gameObject.transform.DOScale(shrink2, amplification2);
    }
    else
    {
        gameObject.transform.DOScale(shrink1, amplification2);
    }
}


private void Amplification(bool arg)
{
    if (arg)
    {
        gameObject.transform.DOScale(amplification1, amplification2);

    }
    else
    {
        gameObject.transform.DOScale(shrink1, amplification2);


    }
}

private void OnEnable()
{


}

private void Hide(bool arg)
{
    gameObject.SetActive(false);
    gameObject.transform.localScale = Vector3.one;
}

private void OnDisable()
{
}

}

···

PartsCtrl
···
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using System;

public class PartsCtrl : MonoBehaviour
{
public int partId;
public Vector3 from;
public Vector3 to;
public float fadeTime = 3f;
public NormalBtnStateEnum normalBtnStateEnum;

private  Tweener tweener;  

private void Awake()
{
    from = transform.localPosition;
    EventCenter.AddListener(EventDefine.IknowBtn_Strength, IknowBtn_StrengthHandle);
    EventCenter.AddListener<int>(EventDefine.StrengthModeItemID, PartInstall); 
    EventCenter.AddListener(EventDefine.IknowBtn_Free, IknowBtn_FreeHandle);
    EventCenter.AddListener<int>(EventDefine.FreeModeItemID, PartInstall); 
    EventCenter.AddListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle);
    EventCenter.AddListener<string>(EventDefine.NormalBtnClick_A, ChildBtnClick_StrucHandle);
    EventCenter.AddListener(EventDefine.ReStartBtn, ReStartBtnHandle);
    EventCenter.AddListener<bool>(EventDefine.PauseDoTween, PauseDoTweenHandle); 

}



void Start()
{
    EventCenter.AddListener<int>(EventDefine.UndoBtn, PartDismant); 
}
private void OnDestroy()
{
    EventCenter.RemoveListener(EventDefine.IknowBtn_Strength, IknowBtn_StrengthHandle);
    EventCenter.RemoveListener<int>(EventDefine.StrengthModeItemID, PartInstall); 
    EventCenter.RemoveListener(EventDefine.IknowBtn_Free, IknowBtn_FreeHandle);
    EventCenter.RemoveListener<int>(EventDefine.FreeModeItemID, PartInstall);
    EventCenter.RemoveListener<string>(EventDefine.MainBtnClick_A, MainBtnClickHandle); 
    EventCenter.RemoveListener<string>(EventDefine.NormalBtnClick_A, ChildBtnClick_StrucHandle);
    EventCenter.RemoveListener(EventDefine.ReStartBtn, ReStartBtnHandle);
    EventCenter.RemoveListener<int>(EventDefine.UndoBtn, PartDismant); 
    EventCenter.RemoveListener<bool>(EventDefine.PauseDoTween, PauseDoTweenHandle); 
}
private void ReStartBtnHandle()
{
    transform.localPosition = from;
    gameObject.SetActive(false);
}

private void ChildBtnClick_StrucHandle(string arg)
{
    if (GameUIManager_A.Instance.currentMainBtnState == MainBtnStateEnum.TrainBtn)
    {
        transform.localPosition = from;
        gameObject.SetActive(false);
    }
   
}

private void MainBtnClickHandle(string arg)
{
    transform.localPosition = from;
     gameObject.SetActive(true);
}

private void IknowBtn_StrengthHandle()
{
    gameObject.SetActive(false);
}

private void IknowBtn_FreeHandle()
{
    gameObject.SetActive(false);
}

void Update()
{
}

private void LateUpdate() 
{
}



void PartInstall(int itemID)
{
    if (itemID == partId && GameUIManager_A.Instance.currentNormalBtnState == normalBtnStateEnum)
    {
        if (tweener != null)
        {
            tweener.SetAutoKill(false);
        }
        gameObject.SetActive(true);
        gameObject.transform.localPosition = to;
        tweener =  transform.DOLocalMove(from, fadeTime);
        if (tweener!=null)
        {
            Debug.Log("zhixing l ");
        }
    }

}


void PartDismant(int id)
{
    if (partId == id)
    {
        if (tweener != null)
        {
            tweener.SetAutoKill(false);
        }
        tweener = transform.DOLocalMove(to, fadeTime).OnComplete(() => { gameObject.SetActive(false); });
    }
}


private void PauseDoTweenHandle(bool boo)
{
    if (boo)
    { gameObject.transform.DOPause(); return; }
    gameObject.transform.DOPlay();
}

}

···

三、效果图

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容