인프런 커뮤니티 질문&답변

고우진님의 프로필 이미지
고우진

작성한 질문수

[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템

Effect (2)

스텟 연동 관련해서 질문이 있습니다.

작성

·

55

·

수정됨

0

제가 기존에 개발해둔 아이템 시스템을 연동시키면서 아이템의 스텟을 정할때 Resources/Stat폴더를 참조하고 그걸 기반으로 Enum으로 해당 스텟들이 있는 스크립트 파일을 만든 다음에 아래에 있는 버튼을 눌러서 일일히 Enum 파일을 동기화시켰는데 너무 번거로운것 같습니다. 생성, 삭제, 수정할때마다 동기화시키면 작업할때마다 딜레이가 너무 커지는데 다른 방법이 있을까요

if (dataType == typeof(Stat))

{

GUI.color = Color.yellow;

// Data를 이름 순으로 정렬하는 Button을 그림

if (GUILayout.Button($"Press it after you finish editing"))

{

StatEnumSynchronizer.SyncStatEnum();

EditorUtility.SetDirty(database);

AssetDatabase.SaveAssets();

}

}


아래는 해당 enum파일을 만드는 스크립트입니다.
using System;

using System.IO;

using System.Linq;

using UnityEditor;

using UnityEngine;

public static class StatEnumSynchronizer

{

private const string StatFolderPath = "Assets/Resources/Stat";

[MenuItem("Tools/Sync Stat Enum")]

public static void SyncStatEnum()

{

if (!Directory.Exists(StatFolderPath))

{

Debug.LogError($"Directory does not exist: {StatFolderPath}");

return;

}

var statFiles = Directory.GetFiles(StatFolderPath, "*.asset", SearchOption.TopDirectoryOnly);

var statCodeNames = statFiles

.Select(file => AssetDatabase.LoadAssetAtPath<Stat>(file))

.Where(stat => stat != null)

.Select(stat => stat.CodeName)

.Distinct()

.OrderBy(name => name)

.ToList();

string enumPath = "Assets/Scripts/Enum/ItemStatusAttribute.cs";

using (var writer = new StreamWriter(enumPath, false))

{

writer.WriteLine("public enum ItemStatusAttribute");

writer.WriteLine("{");

writer.WriteLine(" Default,");

foreach (var codeName in statCodeNames)

{

string enumName = SanitizeEnumName(codeName);

writer.WriteLine($" {enumName},");

}

writer.WriteLine("}");

}

AssetDatabase.Refresh();

Debug.Log("Stat Enum synchronized.");

}

private static string SanitizeEnumName(string name)

{

return new string(name

.Where(c => !char.IsWhiteSpace(c) && (char.IsLetterOrDigit(c) || c == '_'))

.ToArray())

.Replace(" ", "_")

.Replace("-", "_")

.ToUpper();

}

}

 

답변 1

0

고우진님의 프로필 이미지
고우진
질문자

생각을 너무 복잡하고 쓸데없이 한 것 같습니다 그냥 아이템 스크립트에서 Stat을 참조하고 장착, 해제 할때마 디폴트 밸류를 올리거나 내리면 되는거였네요

Developer G님의 프로필 이미지
Developer G
지식공유자

맞습니다. 장착 Item이 Bonus를 줄 Stat들을 가지고 있고, Item 장착 시에 해당하는 Entitiy의 Stat 증감 시켜주면 됩니다.

고우진님의 프로필 이미지
고우진

작성한 질문수

질문하기