[멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 34일차 : 인벤토리 기능 / 2D Rigging

2025. 7. 3. 16:50·멋쟁이사자처럼/부트캠프

인벤토리 기능


1. 아이템 드롭 기능

ItemManager.cs - 아이템 드롭 로직

public void DropItem(Vector3 dropPos)
{
    var randomIndex = Random.Range(0, items.Length);
    GameObject item = Instantiate(items[randomIndex], dropPos, Quaternion.identity);
    Rigidbody2D itemRb = item.GetComponent<Rigidbody2D>();

    itemRb.AddForceX(Random.Range(-2f, 2f), ForceMode2D.Impulse);
    itemRb.AddForceY(3f, ForceMode2D.Impulse);

    float ranPower = Random.Range(-1.5f, 1.5f);
    itemRb.AddTorque(ranPower, ForceMode2D.Impulse);
}
  • 랜덤 아이템 생성
  • X, Y 방향으로 힘을 가해 흩뿌려짐
  • 회전 토크 추가

MonsterCore.cs - 몬스터 사망 시 드롭

public void Death()
{
    isDead = true;
    animator.SetTrigger("Death");
    monsterColl.enabled = false;
    monsterRb.gravityScale = 0f;

    int itemCount = Random.Range(0, 3);
    if (itemCount > 0)
    {
        for (int i = 0; i < itemCount; i++)
        {
            itemManager.DropItem(transform.position);
        }
    }
}
  • 사망 처리 후 아이템을 최대 2개까지 랜덤 드롭
  • 중복 처리 방지 및 안전한 예외처리 포함

2. 인벤토리 UI 구성

ItemManager.cs - 슬롯 초기화 및 버튼 설정

void Start()
{
    slots = slotGroup.GetComponentsInChildren<Slot>(true);
    inventoryButton.onClick.AddListener(OnInventory);
}
  • 인벤토리 시작 시 빈 슬롯 구성
  • 버튼 클릭 시 인벤토리 활성/비활성 전환

Slot.cs - 아이템 추가 및 사용 처리

public void AddItem(IItemObject newItem)
{
    item = newItem;
    isEmpty = false;
    itemImage.sprite = newItem.Icon;
    itemImage.SetNativeSize();

    slotButton.interactable = true;
    itemImage.gameObject.SetActive(true);
}
  • 아이템을 슬롯에 표시
  • 버튼 클릭 시 Use() 호출
public void UseItem()
{
    if (item != null)
    {
        item.Use();
        ClearSlot();
    }
}
  • 아이템 사용 후 슬롯 초기화

3. 아이템 획득 구조

IItemObject 인터페이스

public interface IItemObject
{
    ItemManager Inventory { get; set; }
    GameObject Obj { get; set; }
    string ItemName { get; set; }
    Sprite Icon { get; set; }

    void Get();
    void Use();
}
  • 인벤토리 시스템에 통합될 공통 인터페이스 정의

HpPotion.cs - 획득 구현

void OnCollisionEnter2D(Collision2D other)
{
    if (other.gameObject.CompareTag("Player"))
    {
        Get();
    }
}

public void Get()
{
    gameObject.SetActive(false);
    Inventory.GetItem(this);
}
  • 충돌 시 아이템 비활성화 및 인벤토리에 추가

4. 인벤토리 동작 요약

  • 아이템 드롭 시 ItemManager.DropItem()
  • 플레이어가 아이템과 충돌하면 IItemObject.Get() 호출
  • ItemManager.GetItem()이 빈 슬롯을 찾아 Slot.AddItem() 실행
  • 슬롯 버튼을 눌러 Use() → 효과 실행 및 슬롯 초기화

 

2D Rigging


1. 2D 리깅 실습 요약

과정 요약

  1. Sprite Editor에서 Sprite Sheet 설정
  2. Auto Geometry > Generate
  3. 필요 시 Create Vertex로 정점 추가
  4. Auto Weights로 본(Bone) 자동 연결
  5. IK Manager 2D 추가로 IK 설정 (손/발)

유의사항

  • Auto Weights 후 이상한 Weight 분포는 Brush로 수정
  • 본 구조가 적용된 모델은 Apply 후 씬에 배치
  • IK 설정은 각 Limb마다 Target 설정 필요

'멋쟁이사자처럼 > 부트캠프' 카테고리의 다른 글

[멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 35일차 : 자료구조  (3) 2025.07.08
[멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - [고양이 게임(2D 횡스크롤) Project  (0) 2025.07.04
[멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 33일차 : 공격 판정 / 체력바 / 아이템 획득  (1) 2025.07.02
[멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 32일차 : DontDestroyOnLoad / 몬스터 FSM 설계  (2) 2025.07.01
[멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 31일차 : 탐험 씬(Adventure Scene) 레벨 디자인  (0) 2025.06.30
'멋쟁이사자처럼/부트캠프' 카테고리의 다른 글
  • [멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 35일차 : 자료구조
  • [멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - [고양이 게임(2D 횡스크롤) Project
  • [멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 33일차 : 공격 판정 / 체력바 / 아이템 획득
  • [멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 32일차 : DontDestroyOnLoad / 몬스터 FSM 설계
khybin154
khybin154
khybin154 님의 블로그 입니다.
    티스토리 홈
    |
  • khybin154
    khybin154
    khybin154
  • 글쓰기 관리
  • 전체
    오늘
    어제
  • 공지사항

  • 인기 글

    • 분류 전체보기 N
      • 멋쟁이사자처럼 N
        • 부트캠프 N
  • 블로그 메뉴

    • 태그

      인벤토리 기능
      unity
      dontdestroyonload
      유니티
      fsm 설계
      unity 게임 개발 5기
      공격 판정
      상속
      멋쟁이사자처럼후기
      2d rigging
      게임 수학
      unity book
      고양이 게임 마무리
      p149 ~ p247
      배열 폭탄
      git
      인터페이스
      컴포넌트
      2d light
      c#
    • 링크

    • 최근 글

    • 최근 댓글

    • hELLO· Designed By정상우.v4.10.3
    khybin154
    [멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 34일차 : 인벤토리 기능 / 2D Rigging
    상단으로

    티스토리툴바