/// <summary> /// 特效被回收前的处理 /// </summary> /// <param name="effect_object"></param> public void BeforeRecycleEffect(GameObject effect_object) { if (effect_object != null) { //if (mIsPlayer && !mIsLocalPlayer) //EffectManager.Instance.DecreaseEffectNum(); var delay_time = effect_object.GetComponent <DelayTimeComponent>(); if (delay_time != null) { delay_time.Reset(); } CommonTool.SetActive(effect_object, false); } }
public IEnumerator LoadSceneEffect(Vector3 position, string fileName, float delayTime) { ObjectWrapper ow = new ObjectWrapper(); yield return(ResourceLoader.Instance.StartCoroutine(ObjCachePoolMgr.Instance.LoadPrefab(fileName, ObjCachePoolType.SFX, fileName, ow))); GameObject effect_object = ow.obj as GameObject; if (effect_object == null) { yield break; } GameObject.DontDestroyOnLoad(effect_object); if (mIsDestroy) { BeforeRecycleEffect(effect_object); ObjCachePoolMgr.Instance.RecyclePrefab(effect_object, ObjCachePoolType.SFX, fileName); yield break; } effect_object.transform.position = position; CommonTool.SetActive(effect_object, false); CommonTool.SetActive(effect_object, true); var delay_timer = effect_object.GetComponent <DelayTimeComponent>(); if (delay_timer == null) { delay_timer = effect_object.AddComponent <DelayTimeComponent>(); } delay_timer.DelayTime = delayTime; delay_timer.Start(); SceneEffectInfo info = new SceneEffectInfo(fileName, delayTime, effect_object); mEffectObjects[effect_object.GetHashCode()] = info; delay_timer.SetEndCallBack(new DelayTimeComponent.EndCallBackInfo(OnEffectPlayFinish, effect_object)); }
public override void LateUpdate() { if (mOwner.Trans == null) { return; } Vector3 actPos = mOwner.Trans.position; // 更新阴影 if (mShadowType == ShadowType.FAKE_SHADOW) { if (mFakeShadow != null) { //mFakeShadow.SetActive(true); CommonTool.SetActive(mFakeShadow, true); } else { EnableFakeShadow(); } } else if (mShadowType == ShadowType.REAL_SHADOW) { if (mFakeShadow != null) { //mFakeShadow.SetActive(!mRealShadow); CommonTool.SetActive(mFakeShadow, !mRealShadow); } } else if (mShadowType == ShadowType.NONE) { if (mFakeShadow != null) { //mFakeShadow.SetActive(false); CommonTool.SetActive(mFakeShadow, false); } } }
/// <summary> /// 开始播放剧情 /// </summary> /// <param name="timelineInfo"></param> void PlayImpl(TimelineInfo timelineInfo) { //GameDebug.LogError("TimelineManager.PlayImpl: " + timelineInfo.Id); mPlayingTimeline = timelineInfo; PlayableDirector playableDirector = timelineInfo.PlayableDirector; if (playableDirector == null) { if (timelineInfo.FinishCallback != null) { timelineInfo.FinishCallback(); } if (timelineInfo.RelatedGameObject != null) { GameObject.DestroyImmediate(timelineInfo.RelatedGameObject); } return; } if (playableDirector.playableAsset == null) { if (timelineInfo.FinishCallback != null) { timelineInfo.FinishCallback(); } GameDebug.LogError("Play timeline " + playableDirector.gameObject.name + " error, playable asset is null!"); mPlayingTimeline = null; GameObject.DestroyImmediate(playableDirector.gameObject); if (timelineInfo.RelatedGameObject != null) { GameObject.DestroyImmediate(timelineInfo.RelatedGameObject); } return; } if (Game.Instance.MainCamera == null) { if (timelineInfo.FinishCallback != null) { timelineInfo.FinishCallback(); } GameDebug.LogError("Play timeline " + playableDirector.gameObject.name + " error, main camera is null!"); mPlayingTimeline = null; GameObject.DestroyImmediate(playableDirector.gameObject); if (timelineInfo.RelatedGameObject != null) { GameObject.DestroyImmediate(timelineInfo.RelatedGameObject); } return; } Cinemachine.CinemachineBrain cinemachineBrain = Game.Instance.MainCamera.GetComponent <Cinemachine.CinemachineBrain>(); if (cinemachineBrain == null) { cinemachineBrain = Game.Instance.MainCamera.gameObject.AddComponent <Cinemachine.CinemachineBrain>(); } if (cinemachineBrain != null) { cinemachineBrain.enabled = true; } else { GameDebug.LogError("Play timeline " + playableDirector.gameObject.name + " error, can not find CinemachineBrain component in main camera!"); mPlayingTimeline = null; GameObject.DestroyImmediate(playableDirector.gameObject); if (timelineInfo.RelatedGameObject != null) { GameObject.DestroyImmediate(timelineInfo.RelatedGameObject); } if (timelineInfo.FinishCallback != null) { timelineInfo.FinishCallback(); } return; } // 隐藏所有角色 SetAllActorsVisible(false, timelineInfo.ShowLocalPlayer); // 野外场景中记住正在寻路的任务 if (SceneHelp.Instance.IsInWildInstance() == true) { Task navigatingTask = TaskManager.Instance.NavigatingTask; if (navigatingTask != null) { mNavigatingTaskIdBeforePlay = navigatingTask.Define.Id; } } Actor localPlayer = Game.Instance.GetLocalPlayer(); TimelineAsset asset = playableDirector.playableAsset as TimelineAsset; foreach (TrackAsset track in asset.GetOutputTracks()) { GroupTrack group = track.GetGroup(); if (group != null) { // 绑定主摄像机 if (group.name.StartsWith("Camera") == true) { Camera mainCamera = Game.Instance.MainCamera; if (mainCamera != null) { foreach (PlayableBinding output in track.outputs) { if (output.sourceObject != null) { playableDirector.SetGenericBinding(output.sourceObject, mainCamera.gameObject); } } } } if (group.name.StartsWith("Hero") == true) { if (localPlayer != null) { foreach (PlayableBinding output in track.outputs) { GameObject actorModel = null; if (output.sourceObject != null) { Object binding = playableDirector.GetGenericBinding(output.sourceObject); if (binding == null) { GameDebug.LogError("Player timeline " + timelineInfo.PlayableDirector.name + " error!!! " + output.sourceObject.name + " 's binding object is null!!!"); continue; } GameObject bindingObj = binding as GameObject; if (bindingObj != null) { bindingObj.SetActive(false); } // 根据职业显示主角的模型 if (bindingObj != null && bindingObj.name.StartsWith("Hero_") == true) { uint vocation = uint.Parse(bindingObj.name.Substring(5)); if (vocation == LocalPlayerManager.Instance.LocalActorAttribute.Vocation) { //playableDirector.SetGenericBinding(output.sourceObject, localPlayer.gameObject); CommonTool.SetActive(bindingObj, true); actorModel = bindingObj; } else { CommonTool.SetActive(bindingObj, false); } } } if (actorModel != null && changeSkin) { //changeSkin = false; if (timelineInfo.AvatarProperty != null) { ResourceLoader.Instance.StartCoroutine(AvatarUtils.ChangeModel(actorModel, timelineInfo.AvatarProperty)); } else { AvatarProperty avatarProperty; if (localPlayer.mAvatarCtrl != null && localPlayer.mAvatarCtrl.GetLatestAvatartProperty() != null) { avatarProperty = localPlayer.mAvatarCtrl.GetLatestAvatartProperty(); } else { avatarProperty = mPlayerLastSceneAvatarProperty; } ResourceLoader.Instance.StartCoroutine(AvatarUtils.ChangeModel(actorModel, avatarProperty)); } } } } } } // 音效是否静音 AudioTrack audioTrack = track as AudioTrack; if (audioTrack != null) { audioTrack.muted = GlobalSettings.Instance.SFXMute; } } if (Game.Instance.CameraControl != null) { Game.Instance.CameraControl.Target = null; } // 记住当前状态并暂停主角的自动战斗 mIsAutoFightingWhenPlaying = InstanceManager.Instance.IsAutoFighting; InstanceManager.Instance.IsAutoFighting = false; // 停止主角的寻路 if (timelineInfo.NoStopLocalPlayer == false) { TargetPathManager.Instance.StopPlayerAndReset(); } mCameraRotationBeforePlay = Game.Instance.MainCamera.transform.rotation; mCameraFOVBeforePlay = Game.Instance.MainCamera.fieldOfView; bool setUI = true; if (timelineInfo.ShowUI == true) { setUI = false; } GameInput.Instance.EnableInput(false, setUI); // 暂停CullManager的Update CullManager.Instance.IsEnabled = false; // 隐藏UI if (timelineInfo.ShowUI == false) { xc.ui.ugui.UIManager.Instance.CloseAllWindow(); } if (!GlobalSettings.Instance.MusicMute && timelineInfo.PauseMusic) { AudioManager.Instance.PauseMusic(true); } playableDirector.gameObject.SetActive(true); if (timelineInfo.RelatedGameObject != null) { timelineInfo.RelatedGameObject.SetActive(true); } playableDirector.Play(); ClientEventMgr.Instance.FireEvent((int)ClientEvent.CE_TIMELINE_START, new CEventBaseArgs(timelineInfo.Id)); }