강의

멘토링

커뮤니티

Inflearn コミュニティ Q&A

jaba852350683 のプロフィール画像
jaba852350683

投稿した質問数

【ユニティレベルアップ!】 モジュール式で開発するスキルシステム

効果 (2)

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

作成

·

180

·

編集済み

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();

}

}

 

unitymodules

回答 1

0

jaba852350683님의 프로필 이미지
jaba852350683
質問者

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

Developer G님의 프로필 이미지
Developer G
インストラクター

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

jaba852350683 のプロフィール画像
jaba852350683

投稿した質問数

質問する