TIL 250513

강성원·2025년 5월 28일

TIL 경험하고 배운 것

목록 보기
76/84

오늘 시간은 많이 썼는데 한 것은 별로 없네.
그만큼 집중했다고 봐도 좋을까.

아이템 줍기


IInteractable

  • 내가 클릭하거나 가까이서 특정한 키를 누른다거나 할 때 범용으로 기능을 갖다 붙일 인터페이스가 필요했다. 그래서 IInteractable을 선언했다.
public interface IInteractable // 超超超超超超간단
{
    void Interact(Player player);
}
  • 맵에 떨어진 아이템이나 건물에는 이 인터페이스를 두고 인터페이스 캐스팅을 해준다.
  • 일단은 플레이어 쪽만 상호작용 하니까 인터페이스의 구현부에 Player를 인자로 두었다.

WordItem

땅에 떨어진 아이템은 어떻게 할까 고민 많이했다.
프리팹을 따로 다 만들어야하나..하는 생각도 했다.
일단 리소스 많이 잡아먹고 뭔가 많이 늘어나는 느낌이니 그것은 오답이라고 생각.
전날에 만든 ItemDataSO(Scriptable Object)가 기억났다.

  • WorldItem이라는 빈 도화지 같은 컴포넌트가 ItemDataSO를 받아서 내가 원하는 아이템 모습으로 월드에 생성되도록 한다.

  • WorldItem은 빈 종이 같은 느낌이고, ItemDataSO는 소재(내용)이다.
    만화를 그리면 만화책, 이야기를 쓰면 소설책이 되듯이.

  • 아이템마다 프리팹이나 스크립트가 필요하지 않아져서 좋다고 느꼈고, 나중에도 이 방향을 이어나갈 것 같다.

public static WorldItem WorldItemCreate(ItemDataSO itemData)
{
    GameObject newObj = new GameObject("WorldItem_" + itemData.name);
    newObj.AddComponent<SpriteRenderer>();

    WorldItem worldItem = newObj.AddComponent<WorldItem>();
    worldItem.Init(itemData);

    return worldItem;
}
  • 약간의 편의를 위해서 WorldItem 컴포넌트가 붙은 오브젝트의 생성은 정적 메서드로 선언하고 어디서든 바로 호출 가능하게 만들었다.
profile
개발은삼순이발

0개의 댓글