Unity_2기 내일배움캠프 TIL

Unity_2기 6주차 (231215)

잼잼재미 2023. 12. 15. 20:32

오늘 유니티 숙련 팀 프로젝트가 시작했다. 주제는 타워 디펜스, 2D 로그라이크 게임, 3D 퍼즐 플랫폼 게임, 3D 서바이벌 게임 중 자유롭게 선택해서 진행하는 방식이었다. 우리 조는 회의 끝에 2D 로그라이크 게임을 2D 플랫포머 형식으로 제작하기로 결정했다. 6가지 업무를 나눠 6명의 팀원들이 하나씩 맡기로 했고, 나는 Item, Skill 부분을 맡았다. 

 

 

초기 Wire frame


 

 

 

 

구현 내용


1. Hp, Stamina Item


ItemData

public enum ItemType
{
    None,
    Effect,
    Skiil,
}

[CreateAssetMenu(fileName = "ItemData_", menuName = "Data/ItemData", order = 0)]
public class ItemData : ScriptableObject
{
    public ItemType Type;
    public string Name;
    public string Disription;
}

 

 

EffectItemData

[CreateAssetMenu(fileName = "EffectItemData_", menuName = "Data/EffectItemData", order = 1)]
public class EffectItemData : ItemData
{
    public float Hp;
    public float Stamina;
}

 

ItemData ScriptableObject를 상속받는 EffectItemData ScriptableObject 만들어서 구현했다. 

 

 

EffectItem

public EffectItemData EffectData;

private void OnTriggerEnter2D(Collider2D collision)
{
    if(collision.tag == "Player")
    {
        UseItem();
    }
}

public void UseItem()
{
    // 플레이어 체력, 스테미너 증가 코드
    Debug.Log("플레이어 Hp " + EffectData.Hp + " 회복");
    Debug.Log("플레이어 Stamina " + EffectData.Stamina + " 회복");

    Destroy(gameObject);
}

 

 

 

 

2. BoltItem


SkillItemData

[CreateAssetMenu(fileName = "SkillItemData_", menuName = "Data/SkillItemData", order = 2)]
public class SkillItemData : ItemData
{
    public float Atk;
    public float Stamina;
    public float CoolTime;
    public GameObject SkillEffect;
    public float SkillSpeed;
    public SpringJoint SkillIcon;
}

 

ItemData ScriptableObject를 상속받는 SkillItemData ScriptableObject 만들어서 구현했다. 

 

 

SkillItem

public SkillItemData SkillData;
public PlayerNJM Player;

private void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.tag == "Player")
    {
        UseItem();
    }
}

void UseItem()
{
    Player.IsSkill = true;
    Player.SkillData = SkillData;
    Destroy(gameObject);
}

 

 

 

Skill

public SkillItemData SkillData;

private void Start()
{
    // 플레이어 스테미너 감소
    Debug.Log("스테미나 " + SkillData.Stamina + " 감소");
}

private void Update()
{
    transform.position += new Vector3(1, 0, 0) * SkillData.SkillSpeed * Time.deltaTime;
}

private void OnTriggerEnter2D(Collider2D collision)
{
    // 적에 맞으면 데미지
    if (collision.tag == "Enemy")
    {
        Debug.Log("적 Hp " + SkillData.Atk + " 감소");
    }
}

 

Skill 스크립트를 만들어서 각 Skill의 ScriptalbeObject 데이터를 불러와서 Skill에 적용되도록 했다. Skill 스크립트는 각각 Skill 프리팹에 적용하여 Skill들마다 각각 데이터에 맞게 독립적으로 동작할 수 있도록 구현했다.

 

 

 

SkillItem을 먹어야지 스킬을 사용할 수 있도록 구현했다.

 

오늘의 회고


사실 저번 팀 프로젝트에서 아이템 구현을 맡았기 때문에 다른 부분을 맡고 싶었지만 회의 끝에 결국 다시 아이템을 맡게 되었다. 하지만 우리가 구상한 게임은 아이템을 먹으면 스킬을 사용할 수 있기때문에 스킬부분도 함께 맡게 되어서 구현할 부분이 많았다. 이번에는 강의에서 몇번이나 배웠던 ScriptableObject를 사용하여 구현을 하고 싶었기 때문에 사용했다. Item의 데이터를 설정하는 것이 정말 쉬웠고, Item의 종류가 많아져도 깔끔하게 관리할 수 있을 것 같았다. 정말 유용한 기능이라고 느꼈다. 이번 팀프로젝트는 조원들 모두 몇번이나 경험이 있었기 때문에 다들 막힘없이 진행된 것 같은 느낌이 들었다. 첫날의 시작이 좋기 때문에 좋은 결과물을 만들어 내고 싶다!

 

'Unity_2기 내일배움캠프 TIL' 카테고리의 다른 글

Unity_2기 7주차 (231219)  (1) 2023.12.19
Unity_2기 7주차 (231218)  (0) 2023.12.18
Unity_2기 6주차 (231214)  (0) 2023.12.14
Unity_2기 6주차 (231213)  (0) 2023.12.13
Unity_2기 6주차 (231212)  (1) 2023.12.12