🎯이번 프로젝트 목표
- 디자인 패턴 적극활용
- 객체 지향 구조로 코드 작성
- 예외처리 코드 작성
- 최대한 최적화 해보기
👩🏻💻오늘 할일
- 자원 획득과 가공 시스템을 위한 사전 준비
데이터 관리는 ScriptableObject
ItemData클래스를 만들어서 WeaponData FoodData가 ItemData를 상속받게 하였다.
▼아이템 관리 클래스 다이어그램
[System.Serializable] 과 struct(구조체) 를 활용하여
인스펙터에서 값을 설정할수있게 해주었다.
이 다음에는 자원 획득 가능한 오브젝트 데이터도 ScriptableObject로 만들어주었다.
그리고 interface도 미리 작성해두었다.
public interface IInteractable // 상호작용 인터페이스
{
public string GetInfo(); //설명 표시
public void Interact(); // 상호작용을 실행
}
public interface IDroppable // 아이템 드롭 인터페이스
{
public void Drop(Vector3 hit,Vector3 normal); //아이템 드롭
}
public interface IEatable // 음식 섭취 인터페이스
{
public void Eat(); //음식 섭취
}
public interface IEquippable //장착 인터페이스
{
public void Equip(); //장착
public void UnEquip(); //장착 해제
}
작성해둔 인터페이스를 활용하여 돌 스크립트의 기반을 작성해보았다.
public class Rock : MonoBehaviour, IInteractable
{
[SerializeField]
private ItemData resourceData; //획득 자원 데이터
[SerializeField]
private ResourceNodeData nodeData; //채집 가능한 오브젝트 데이터
private int rockHp; //돌 오브젝트의 체력
private int rockYield; //채집 한번에 획득하는 자원갯수
private void Start()
{
rockHp = NodeData.Hp;
rockYield = NodeData.Yield;
}
public string GetInfo()
{
//TODO : 인벤토리에 아이템을 최대소지수 만큼 가지고 있으면 더이상 채집 못한다고 표시
return $" F키를 눌러 채집";
}
//상호 작용 실행
public void Interact()
{
rockHp -= rockYield;
//TODO : 인벤토리에 추가
//TODO : 인벤토리에 아이템을 최대소지수 만큼 가지고 있으면 채집 불가
Debug.Log($"인벤토리에{resourceData.ItemName}을 인벤토리에 추가하였습니다!");
if (rockHp <= 0) //더이상 채집 불가능하면
{
Destroy(gameObject); //오브젝트 파괴
}
}
}
'과제' 카테고리의 다른 글
[Unity,C#,3D] 게임 개발 숙련 개인 과제 3일 차 (0) | 2025.03.06 |
---|---|
[Unity,C#,3D] 게임 개발 숙련 개인 과제 2일 차 (0) | 2025.03.05 |
[Unity,C#,3D]게임 개발 숙련 개인 과제 1일 차 (0) | 2025.03.04 |
[Unity,C#] 유니티 입문 팀 프로젝트 개발 2일차 (0) | 2025.02.25 |
[Unity,C#] 유니티 입문 팀 프로젝트 개발 1일차 (0) | 2025.02.24 |