Files
JJBB/Assets/Project/Script/SceneMovie/SceneMovie.cs
2024-08-23 15:49:34 +08:00

106 lines
2.9 KiB
C#

using UnityEngine;
using System.Collections;
using Games.Events;
using Games.Scene;
using UnityEngine.Playables;
public class SceneMovie : MonoBehaviour
{
public PlayableDirector _PlayableDirector;
public double DurTime = -1;
public float DelayDestroy = 0;
public void AddDurTime(float Time)
{
if (_PlayableDirector != null)
{
DurTime = Time + _PlayableDirector.duration;
}
else
DurTime = Time;
DurTime += DelayDestroy;
}
private void Start()
{
if(_PlayableDirector!=null)
{
if(DurTime<=0)
{
DurTime = _PlayableDirector.duration;
}
if (_PlayableDirector.playOnAwake == false)
{
_PlayableDirector.Pause();
}
else
{
_PlayableDirector.Play();
}
}
InitMove();
if (Games.LogicObj.WorldUIRoot.Instance != null)
Games.LogicObj.WorldUIRoot.Instance.SetShow(false);
SceneMovieManager.Instance._PlayingMovie = true;
// 强制关闭雾效果
CameraController.ForceNoFog(true, 0);
EventDispatcher.Instance.Dispatch(Games.Events.EventId.SceneMovie, true);
}
private void Update()
{
if (DurTime <= 0)
{
MovieEnd();
return;
}
DurTime -= Time.deltaTime;
}
private void OnDisable()
{
if (!GameManager.applicationQuit)
{
if (Games.LogicObj.WorldUIRoot.Instance != null)
Games.LogicObj.WorldUIRoot.Instance.SetShow(true);
SceneMovieManager.Instance._PlayingMovie = false;
// 恢复当前雾效果
CameraController.ForceNoFog(false, 0);
EventDispatcher.Instance.Dispatch(Games.Events.EventId.SceneMovie, false);
}
}
public void InitMove()
{
var mainChar = transform.Find("Actors/MainChar");
if (mainChar == null)
return;
gameObject.SetActive(false);
var charModel = mainChar.GetChild(0);
if (charModel != null)
GameObject.Destroy(charModel.gameObject);
var chatAnim = Singleton<ObjManager>.Instance.MainPlayer.gameObject.GetComponentInChildren<Animator>();
var copyChar = GameObject.Instantiate(chatAnim.gameObject);
copyChar.transform.SetParent(mainChar);
copyChar.transform.localPosition = Vector3.zero;
copyChar.transform.localRotation = Quaternion.Euler(Vector3.zero);
var rends = copyChar.GetComponentsInChildren<Renderer>();
for (int i = 0; i < rends.Length; ++i)
{
rends[i].gameObject.layer = mainChar.gameObject.layer;
}
gameObject.SetActive(true);
}
public void MovieEnd()
{
SceneMovieManager.Instance.PlayMovieOver(this);
}
}