This commit is contained in:
2025-06-26 21:02:29 +08:00
parent 578387269a
commit 14089f66be
12 changed files with 3233 additions and 2817 deletions
@@ -74,10 +74,21 @@ namespace AibisDream
{
if (gearFollower != null)
{
// 停止所有DOTween动画
if (gearFollower.gameObject != null)
{
DOTween.Kill(gearFollower.gameObject);
}
gearFollower.ClearCutLine();
Destroy(gearFollower.gameObject);
DestroyImmediate(gearFollower.gameObject);
gearFollower = null;
}
// 重置状态
isCuttingMode = false;
isEntranceComplete = false;
isGearActive = false;
}
private void ActivateGear()
@@ -266,8 +277,25 @@ namespace AibisDream
_targetModule.StopCutTextFlicker();
}
// 清理GearFollower
if (gearFollower != null)
{
// 停止所有DOTween动画
if (gearFollower.gameObject != null)
{
DOTween.Kill(gearFollower.gameObject);
}
// 强制销毁GearFollower
DestroyImmediate(gearFollower.gameObject);
gearFollower = null;
}
if (entrancePanel != null)
{
// 停止面板的DOTween动画
DOTween.Kill(entrancePanel);
// 获取当前相机位置
Vector3 startPosition = GetPanelSpawnPosition();
@@ -277,14 +305,46 @@ namespace AibisDream
.OnComplete(() => {
Destroy(entrancePanel);
entrancePanel = null;
gearFollower = null;
});
}
else if (gearFollower != null)
}
private void OnDestroy()
{
// 从系统字典中注销
FixSystemCenter.SystemDic.Unregister<CuttingManager>();
// 清理相机注册
CameraKit.Instance.UnRegisterCamera(CameraEnum.CutEmo);
CameraKit.Instance.UnRegisterCamera(CameraEnum.CutMemory);
CameraKit.Instance.UnRegisterCamera(CameraEnum.CutLogic);
CameraKit.Instance.UnRegisterCamera(CameraEnum.CutEmoDeep);
CameraKit.Instance.UnRegisterCamera(CameraEnum.CutMemoryDeep);
CameraKit.Instance.UnRegisterCamera(CameraEnum.CutLogicDeep);
// 强制清理所有相关对象
if (gearFollower != null)
{
Destroy(gearFollower.gameObject);
// 如果gearFollower还在运行,强制停止
if (gearFollower.gameObject != null)
{
DestroyImmediate(gearFollower.gameObject);
}
gearFollower = null;
}
if (entrancePanel != null)
{
DestroyImmediate(entrancePanel);
entrancePanel = null;
}
// 重置状态
isCuttingMode = false;
isEntranceComplete = false;
isGearActive = false;
_targetModule = null;
_targetSpriteRenderer = null;
}
}
}
@@ -853,8 +853,74 @@ public class GearFollower : MonoBehaviour
if (cutCompleteSequence != null)
{
cutCompleteSequence.Kill();
cutCompleteSequence = null;
}
// 停止所有协程
StopAllCoroutines();
// 清理特效
if (cutLight != null)
{
cutLight.enabled = false;
}
if (sparkVFX != null)
{
sparkVFX.Stop();
}
// 清理切割线
if (cutLineRenderer != null)
{
cutLineRenderer.positionCount = 0;
}
// 停止音效
StopDrillSfxIfPlaying();
// 重置目标精灵状态
if (targetSpriteRenderer != null)
{
// 恢复原始状态
targetSpriteRenderer.transform.position = originalTargetPosition;
targetSpriteRenderer.transform.rotation = originalTargetRotation;
targetSpriteRenderer.transform.localScale = originalTargetScale;
// 恢复透明度
Color color = targetSpriteRenderer.color;
color.a = 1f;
targetSpriteRenderer.color = color;
}
// 重置所有状态变量
isCutting = false;
isInTractionMode = false;
isCutComplete = false;
isFadingOut = false;
isCutTextFlickering = false;
currentState = State.Follow;
// 清理列表
if (timedCutPoints != null)
{
timedCutPoints.Clear();
}
if (cutEdgeIndices != null)
{
cutEdgeIndices.Clear();
}
if (edgePoints != null)
{
edgePoints.Clear();
}
if (originalEdgePoints != null)
{
originalEdgePoints.Clear();
}
}
// 停止音效的辅助方法
+6
View File
@@ -155,6 +155,12 @@ namespace AibisDream
{
UIManager.Instance.GetPanel<PlayToolPanel>().FadeInSync(0.1f);
// 清理所有系统注册
if (FixSystemCenter.SystemDic != null)
{
FixSystemCenter.SystemDic.Clear();
}
// 执行场景切换等功能
CameraKit.Instance.ResetCamera();
yield return SceneLoader.Instance.LoadSceneAsync("ClinicOut");
+13
View File
@@ -2,9 +2,11 @@ using System;
using System.Collections;
using AibisDream.Framework;
using AibisDream.Kit;
using AibisDream.FixSystem;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.SceneManagement;
using DG.Tweening;
namespace AibisDream
{
@@ -50,8 +52,19 @@ namespace AibisDream
// 场景转换参数
_isLoading = true;
_sceneToLoad = targetScene;
// 在卸载场景前清理所有系统
if (!string.IsNullOrEmpty(_data.sceneName))
{
// 清理所有DOTween动画
DOTween.KillAll();
// 清理所有系统注册
if (FixSystemCenter.SystemDic != null)
{
FixSystemCenter.SystemDic.Clear();
}
yield return Addressables.UnloadSceneAsync(_loadHandle);
}
@@ -39,6 +39,16 @@ namespace AibisDream
public override IEnumerator ChangeStateAsync(string animaName)
{
_animator.Play(animaName);
// 等待一帧确保动画状态切换完成
yield return null;
// 等待直到动画状态名称匹配
while (!_animator.GetCurrentAnimatorStateInfo(0).IsName(animaName))
{
yield return null;
}
var info = _animator.GetCurrentAnimatorStateInfo(0);
yield return new WaitForSeconds(info.length);
}