내일배움캠프 20일차 [TIL]

장민제·2025년 5월 9일

내일배움캠프

목록 보기
23/41

✅ 오늘의 요약

  • 스테이지 프리셋 에디터 기능 추가
  • 아이템 추가

📝 스테이지 프리셋 에디터 기능 추가

더 많은 스테이지 구조를 위해 BaseTileMap도 저장해서 생성하도록 하였고,
StageID의 저장된 데이터를 불러와 화면에 표시해주는 Preview 기능과
기존에 존재하는 프리셋이 있으면 확인 후 덮어쓰는 Overwrite 기능을 추가하였다.

◾ OverwritePreset()

// 프리셋 덮어쓰기
private void OverwritePreset(StagePresetTool tool)
{
    string path = $"{PATH}Stage_{tool.stageID}.asset";
    StagePreset exist = AssetDatabase.LoadAssetAtPath<StagePreset>(path);

    if (exist == null)
    {
        Debug.LogWarning("Doesn't Exist Preset to Overwirte");
        return;
    }

    if (!EditorUtility.DisplayDialog("Check Overwrite", $"Overwrite {tool.stageID} Preset?", "Yes", "No"))
    {
        return;
    }


    // 새로운 임시 ScriptableObject를 만들어 데이터 채움
    StagePreset temp = CreateInstance<StagePreset>();

    SaveDataToPreset(tool, temp);

    // 기존 프리셋에 덮어쓰기
    EditorUtility.CopySerialized(temp, exist);
    EditorUtility.SetDirty(exist);
    AssetDatabase.SaveAssets();

    Debug.Log($"StagePreset(ID: {tool.stageID})is Overwrited");
}

◾ PreviewPreset()

// 프리셋 미리보기
private void PreviewPreset(StagePresetTool tool)
{
    StagePreset[] presets = Resources.LoadAll<StagePreset>("StagePresets");
    StagePreset preset = presets.SingleOrDefault(p => p.stageID == tool.stageID);

    if (preset == null)
    {
        Debug.LogWarning($"Doesn't Exist Preset (ID: {tool.stageID})");
        return;
    }

    tool.stageManager.PreviewStage(preset);
}


◾ 아이템 추가

간단하게 아이템도 추가를 했다.

📃 ItemBase.cs

using UnityEngine;

public abstract class ItemBase : MonoBehaviour
{
    protected virtual void OnTriggerEnter2D(Collider2D other)
    {
        if(other.gameObject.CompareTag("Player"))
        {
            UseItem(other.GetComponent<BaseCharacter>());
        }
    }

    abstract protected void UseItem(BaseCharacter player);
}

🧡 간단한 회복 아이템

using UnityEngine;

public class HealItem : ItemBase
{
    [SerializeField] int value = 10;

    protected override void UseItem(BaseCharacter player)
    {
        player.currentHealth += value;
        Destroy(gameObject);
    }
}

어떤 아이템들을 추가하면 좋을지 구상 중이다.


🧠 느낀점

에디터 기능을 직접 구현해보면서 ScriptableObject를 활용하는 법을 더 잘 이해하게 됐다. Overwrite나 Preview 기능 덕분에 프리셋 작업이 훨씬 편해졌다.
아이템 시스템도 기본 구조를 만들었고, 앞으로 다양한 아이템을 쉽게 추가할 수 있을 것 같다.
하나하나 만들어가면서 점점 시스템이 갖춰지는 게 개발의 즐거움인 거 같다.

profile
Unity, C#

0개의 댓글