using UnityEngine; using UnityEngine.Playables; using Games.Events; using System.Collections; using System.Collections.Generic; public class MovieEventRecv : MonoBehaviour { [System.Serializable] public class ParamGameObjInfo { public MovieEventSend.EventInfo _Event; public GameObject newGameObj; public Vector3 Pos = Vector3.zero; public Vector3 localEulerAngles = Vector3.zero; public Vector3 Scale = Vector3.one; } public bool HideOnAwake = false; public ParamGameObjInfo[] ParamGameObjs; private void Awake() { Games.Events.EventDispatcher.Instance.Add(Games.Events.EventId.MovieEvent, OnRecive); gameObject.SetActive(!HideOnAwake); } void OnDestroy() { Games.Events.EventDispatcher.Instance.Remove(Games.Events.EventId.MovieEvent, OnRecive); } private void OnRecive(object param) { EventSenderInfo SenderInfo = param as EventSenderInfo; if (SenderInfo == null || SenderInfo._SendID == -1) return; for(int i=0;i AddMeshObjs = new Dictionary(); void AddMesh(bool state,int SenderID, ParamGameObjInfo ParamGameObj) { if (state == false && AddMeshObjs.ContainsKey(SenderID)) { GameObject DelObj = AddMeshObjs[SenderID]; if (DelObj != null) { DelObj.SetActive(false); GameObject.Destroy(DelObj); } AddMeshObjs.Remove(SenderID); return; } if (ParamGameObj == null || state == false) return; if (AddMeshObjs.ContainsKey(SenderID)) { AddMeshObjs[SenderID].SetActive(true); return; } GameObject AddMeshObj = GameObject.Instantiate(ParamGameObj.newGameObj) as GameObject; if (AddMeshObj == null) return; AddMeshObj.transform.localPosition = ParamGameObj.Pos; AddMeshObj.transform.localEulerAngles = ParamGameObj.localEulerAngles; AddMeshObj.transform.localScale = (ParamGameObj.Scale == Vector3.zero ? Vector3.one : ParamGameObj.Scale); AddMeshObjs.Add(SenderID, AddMeshObj); } Dictionary NewMeshObjs = new Dictionary(); void ChangeMesh(bool state,int SenderID, ParamGameObjInfo ParamGameObj) { if(state==false && NewMeshObjs.ContainsKey(SenderID)) { GameObject DelObj = NewMeshObjs[SenderID]; if (DelObj != null) { DelObj.SetActive(false); GameObject.Destroy(DelObj); } NewMeshObjs.Remove(SenderID); gameObject.SetActive(true); return; } if (ParamGameObj == null || state==false) return; if (NewMeshObjs.ContainsKey(SenderID)) return; GameObject NewMeshObj = GameObject.Instantiate(ParamGameObj.newGameObj) as GameObject; if (NewMeshObj == null) return; NewMeshObj.transform.SetParent(transform.parent); NewMeshObj.transform.localPosition = transform.localPosition; NewMeshObj.transform.localEulerAngles = transform.localEulerAngles; NewMeshObj.transform.localScale = transform.localScale; gameObject.SetActive(false); NewMeshObjs.Add(SenderID, NewMeshObj); } void StartTimeLine(bool state, int SenderID, ParamGameObjInfo ParamGameObj) { if (ParamGameObj == null || ParamGameObj.newGameObj == null) return; PlayableDirector play = ParamGameObj.newGameObj.GetComponent(); if (play == null) return; if (state) play.Play(); else play.Stop(); } void Dissolve(bool state, int SenderID, ParamGameObjInfo ParamGameObj) { if (ParamGameObj == null || ParamGameObj.newGameObj == null || state == false) return; Dissolve dissolve = ParamGameObj.newGameObj.EnsureComponent(); if (dissolve != null) dissolve.StartDissolove(); } void DestroyGameObj() { gameObject.SetActive(false); GameObject.Destroy(gameObject); } void ShowGameObj(bool state, int SenderID, ParamGameObjInfo ParamGameObj) { if (ParamGameObj == null || ParamGameObj.newGameObj == null) { gameObject.SetActive(state); return; } ParamGameObj.newGameObj.SetActive(state); } }