Fix full flow reset cleanup for outlines and residual objects, adjust EndPanel buttons

This commit is contained in:
yangbear
2026-07-12 12:17:06 +08:00
parent a6bda2b296
commit e7eb9a9cbc
8 changed files with 312 additions and 66 deletions
+53 -1
View File
@@ -19,6 +19,10 @@ public class AudioManager : MonoBehaviour
private AudioSource _bgSource;
private AudioSource _sfxSource;
private AudioSource _voiceSource;
private Coroutine _cameraSwitchRoutine;
private Vector3 _camera3InitialPosition;
private Quaternion _camera3InitialRotation;
private bool _hasCamera3InitialTransform;
void Awake()
{
@@ -42,6 +46,7 @@ public class AudioManager : MonoBehaviour
if (_basketballSfx == null) _basketballSfx = UnityEditor.AssetDatabase.LoadAssetAtPath<AudioClip>("Assets/Audio/start/basketballSound.wav");
if (_manCallSfx == null) _manCallSfx = UnityEditor.AssetDatabase.LoadAssetAtPath<AudioClip>("Assets/Audio/start/mancall.wav");
#endif
CacheCamera3InitialTransform();
Debug.Log($"[AudioManager] 就绪 homeBg={_homeBg!=null} expBg={_experimentBg!=null} sfx={_basketballSfx!=null}/{_manCallSfx!=null}");
}
@@ -49,6 +54,7 @@ public class AudioManager : MonoBehaviour
public void PlayHomeBg()
{
if (_homeBg == null) return;
if (_bgSource.clip == _homeBg && _bgSource.isPlaying) return;
_bgSource.clip = _homeBg;
_bgSource.volume = BgVolume;
_bgSource.Play();
@@ -58,6 +64,7 @@ public class AudioManager : MonoBehaviour
public void PlayExperimentBg()
{
if (_experimentBg == null) return;
if (_bgSource.clip == _experimentBg && _bgSource.isPlaying) return;
_bgSource.clip = _experimentBg;
_bgSource.volume = BgVolume;
_bgSource.Play();
@@ -99,7 +106,51 @@ public class AudioManager : MonoBehaviour
public void SwitchToCamera3()
{
StartCoroutine(SmoothSwitchCameraCoroutine());
CacheCamera3InitialTransform();
if (_cameraSwitchRoutine != null) StopCoroutine(_cameraSwitchRoutine);
_cameraSwitchRoutine = StartCoroutine(SmoothSwitchCameraCoroutine());
}
public void ResetCamerasToHome()
{
if (_cameraSwitchRoutine != null)
{
StopCoroutine(_cameraSwitchRoutine);
_cameraSwitchRoutine = null;
}
var mainCam = GameObject.Find("Main Camera");
var cam2 = GameObject.Find("camera2");
var cam3 = GameObject.Find("camera3");
SetCameraEnabled(mainCam, true);
SetCameraEnabled(cam2, false);
SetCameraEnabled(cam3, false);
if (cam3 != null && _hasCamera3InitialTransform)
{
cam3.transform.position = _camera3InitialPosition;
cam3.transform.rotation = _camera3InitialRotation;
}
Debug.Log("[AudioManager] 已恢复首页相机状态");
}
private void CacheCamera3InitialTransform()
{
if (_hasCamera3InitialTransform) return;
var cam3 = GameObject.Find("camera3");
if (cam3 == null) return;
_camera3InitialPosition = cam3.transform.position;
_camera3InitialRotation = cam3.transform.rotation;
_hasCamera3InitialTransform = true;
}
private void SetCameraEnabled(GameObject cameraObject, bool enabled)
{
if (cameraObject == null) return;
var camera = cameraObject.GetComponent<Camera>();
if (camera != null) camera.enabled = enabled;
}
private System.Collections.IEnumerator SmoothSwitchCameraCoroutine()
@@ -148,6 +199,7 @@ float duration = 1.0f;
cam3.transform.position = targetPos;
cam3.transform.rotation = targetRot;
_cameraSwitchRoutine = null;
Debug.Log("[AudioManager] camera2→camera3 平滑过渡完成");
}