ThreeKingdomsSlingshot/Assets/VFX/GabrielAguiarProductions/Scripts/ParticleSystemController/SaveParticleSystemScript.cs

111 lines
3.6 KiB
C#
Raw Permalink Normal View History

스킬 이펙트 작업 준비 — 스킬 테스트 씬 · WL 이펙트 이식 · 이펙트 표 · 보병·창·기병 슬링샷 공격 = WL 창 돌진 이펙트 시험(PD 2026-11-09) PD 「WL 프로젝트에서 스킬을 구현하던 방식과 동일하게 유닛 별 스킬 구현」 · 「테스트 목적: 보병, 창, 기병을 슬링샷으로 공격할 때 WL 창 돌진 공격 이펙트」 - 스킬 테스트 씬 Assets/Scenes/SkillTest.unity(SkillTestBootstrap · 메뉴 TKS/Skill Test/Build Scene): 영웅 목록 선택(heroes.csv 56) · 더미(죽지 않음 · 행동 토글 · 배치 표 Resources/Skills/skill_test.csv) · 슬링샷 · 액티브 버튼 · 쿨 무시 · 영웅 무적 · 이펙트 보기(에디터 · Assets/VFX 검색 → 영웅에 띄움) - 이펙트 표 Resources/Skills/skill_vfx.csv → Runtime/Skills/SkillVfx(키 = 스킬 id 또는 basic_<병종> · cast/travel/hit · f_every 반복 · 사본 Resources/Fx/TKS_Fx_*) · 훅 = SkillSystem Announce/BeginAction/EndAction/Hit/Instant - WL 이펙트 이식 Assets/VFX(약 640 MB · 빌트인 호환분만 · GUID 유지 · 도구 Tools/wl_vfx_import.py) · URP 셰이더 빌트인 이식 4종 Assets/VFX/_BuiltinPorts · com.unity.shadergraph 17.3.0 · 카메라 깊이 텍스처 켬(셰이더 그래프 소프트 파티클) - 시험: basic_infantry/spear/cavalry travel = TKS_Fx_SpearRush · SpearRushWrap · SpearRushDust(WL WLStaffEarth rushFx 1~3 값 환산) — 표 9행 삭제 = 원래대로 - 테스트 118/118 · console error 0 · 이 PC 첫 임포트 자동 재직렬화(png·tga .meta · UITheme · ProjectSettings · InputManager)는 제외 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 14:12:52 +00:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Reflection;
namespace GAP_ParticleSystemController
{
public static class SaveParticleSystemScript{
public static void SaveVFX (GameObject prefabVFX, List<ParticleSystemOriginalSettings> psOriginalSettingsList) {
#if UNITY_2018_3_OR_NEWER
var prefabFolderPath = GetPrefabFolder2018_3 (prefabVFX);
#else
var prefabFolderPath = GetPrefabFolder (prefabVFX);
#endif
#if UNITY_EDITOR
if (!Directory.Exists (prefabFolderPath + "/OriginalSettings")) {
UnityEditor.AssetDatabase.CreateFolder (prefabFolderPath, "OriginalSettings");
Debug.Log ("Created folder: " + prefabFolderPath + "/OriginalSettings");
}
#endif
BinaryFormatter bf = new BinaryFormatter ();
FileStream stream = new FileStream (prefabFolderPath + "/OriginalSettings/" + prefabVFX.name + ".dat", FileMode.Create);
bf.Serialize (stream, psOriginalSettingsList);
stream.Close ();
#if UNITY_2018_3_OR_NEWER
SaveNestedPrefab(prefabVFX);
#endif
Debug.Log ("Original Settings of '" + prefabVFX.name + "' saved to: " + prefabFolderPath + "/OriginalSettings");
}
public static List<ParticleSystemOriginalSettings> LoadVFX (GameObject prefabVFX) {
#if UNITY_2018_3_OR_NEWER
var prefabFolderPath = GetPrefabFolder2018_3 (prefabVFX);
#else
var prefabFolderPath = GetPrefabFolder(prefabVFX);
#endif
if (File.Exists (prefabFolderPath + "/OriginalSettings/" + prefabVFX.name + ".dat")) {
BinaryFormatter bf = new BinaryFormatter ();
FileStream stream = new FileStream (prefabFolderPath + "/OriginalSettings/" + prefabVFX.name + ".dat", FileMode.Open);
List<ParticleSystemOriginalSettings> originalSettingsList = new List<ParticleSystemOriginalSettings> ();
originalSettingsList = bf.Deserialize (stream) as List<ParticleSystemOriginalSettings>;
stream.Close ();
return originalSettingsList;
} else {
Debug.Log ("No saved VFX data found");
return null;
}
}
public static bool CheckExistingFile (GameObject prefabVFX){
#if UNITY_2018_3_OR_NEWER
var prefabFolderPath = GetPrefabFolder2018_3 (prefabVFX);
#else
var prefabFolderPath = GetPrefabFolder(prefabVFX);
#endif
if (prefabFolderPath != null) {
if (File.Exists (prefabFolderPath + "/OriginalSettings/" + prefabVFX.name + ".dat"))
return true;
else
return false;
} else
return false;
}
static string GetPrefabFolder (GameObject prefabVFX){
#if UNITY_EDITOR
string prefabPath = UnityEditor.AssetDatabase.GetAssetPath (prefabVFX);
string prefabFolderPath = Path.GetDirectoryName (prefabPath);
return prefabFolderPath;
#else
return null;
#endif
}
#if UNITY_2018_3_OR_NEWER
static string GetPrefabFolder2018_3 (GameObject prefabVFX)
{
#if UNITY_EDITOR
string prefabPath = UnityEditor.SceneManagement.PrefabStageUtility.GetPrefabStage(prefabVFX).prefabAssetPath;
string prefabFolderPath = Path.GetDirectoryName (prefabPath);
return prefabFolderPath;
#else
return null;
#endif
}
#endif
#if UNITY_2018_3_OR_NEWER
public static void SaveNestedPrefab(GameObject prefab)
{
#if UNITY_EDITOR
var prefabStage = UnityEditor.SceneManagement.PrefabStageUtility.GetPrefabStage(prefab);
UnityEditor.PrefabUtility.SaveAsPrefabAsset(prefabStage.prefabContentsRoot, prefabStage.prefabAssetPath);
#endif
}
#endif
}
}