using UnityEngine; using System; #if MAGICACLOTH2 using MagicaCloth2; #endif /// /// MagicaCloth2 시뮬레이션 리셋 관리 /// [Serializable] public class ClothSimulationManager { private Action log; private Action logError; public void Initialize(Action log, Action logError) { this.log = log; this.logError = logError; } #if MAGICACLOTH2 public void RefreshAllMagicaCloth(bool keepPose = false) { var allMagicaCloths = UnityEngine.Object.FindObjectsByType(FindObjectsSortMode.None); if (allMagicaCloths == null || allMagicaCloths.Length == 0) { log?.Invoke("씬에 MagicaCloth 컴포넌트가 없습니다."); return; } int resetCount = 0; foreach (var cloth in allMagicaCloths) { if (cloth != null && cloth.IsValid()) { try { cloth.ResetCloth(keepPose); resetCount++; } catch (Exception e) { logError?.Invoke($"MagicaCloth 리셋 실패 ({cloth.gameObject.name}): {e.Message}"); } } } log?.Invoke($"MagicaCloth 시뮬레이션 리셋 완료 ({resetCount}/{allMagicaCloths.Length}개)"); } public void ResetAllMagicaCloth() { RefreshAllMagicaCloth(false); } public void ResetAllMagicaClothKeepPose() { RefreshAllMagicaCloth(true); } #else public void RefreshAllMagicaCloth(bool keepPose = false) { logError?.Invoke("MagicaCloth2가 설치되어 있지 않습니다."); } public void ResetAllMagicaCloth() { logError?.Invoke("MagicaCloth2가 설치되어 있지 않습니다."); } public void ResetAllMagicaClothKeepPose() { logError?.Invoke("MagicaCloth2가 설치되어 있지 않습니다."); } #endif }