본문 바로가기

MakeNote

Project - 남겨라 프로젝트 +4일차

2022.0612

 

-TODO-

플레이어의 수치를 실질적으로 관리할 데이터 만들기

스킬 관리할 SkillManager 만들기

메뉴 패널과 버튼 추가하기

메뉴 패널 - 스킬패널, 전투 패널


플레이어 수치관리 DataManager 만들기

저번에 만든 플레이어에 직접 수치를 넣어줬었는데요, 생각해보니 플레이어가 데미지를 받고 데미지를 주고 이런 연산을 따로 하는 매니저가 있으면 좋을것 같아서 플레이어를 싱글톤화 시킬 수 없어서 플레이어의 데이터를 받고있는 데이터 매니저를 만들어 주었습니다.

public class DataManager : MonoBehaviour
{
    public static DataManager _instance = new DataManager();
    
        //플레이어 스테이터스
        [Header("플레이어 스테이터스")]
        [Tooltip("플레이어 체력")]
        public float playerHp;
        [Tooltip("플레이어 마나")]
        public float playerMp;
        [Tooltip("플레이어 공격력")]
        public float playerAD;
        [Tooltip("플레이어 마법공격력")]
        public float playerAP;

    private void Awake() {
        _instance = this;
        DontDestroyOnLoad(this.gameObject);
    }
}

 

이렇게 데이터 매니저를 만들어주고 플레이어 Init을 만들어서 데이터 매니저에 있는 데이터를 받아와주겠습니다. Player 스크립트로 돌아가서 PlayerInit함수를 만들어주고 아래와 같이 작성해줍니다.

 

void playerInit()
{
     _playerHp = DataManager._instance.playerHp;
     _playerMp = DataManager._instance.playerMp;
     _playerAD = DataManager._instance.playerAD;
     _playerAP = DataManager._instance.playerAP;
}

 

이렇게 되면 싱글톤으로 만든 DataManager에서 플레이어의 스탯을 받아올수 있습니다.


스킬 관리할 스킬 매니저 만들기

스킬 매니저를 한번 만들어 봅시다. 스킬의 정보에는 이름, 스킬 프리팹, 스킬 데미지, 스킬 레벨, 스킬 소모 마나 와 같은 정보가 필요하므로 스크립터블 오브젝트로 만들어서 정보를 관리하겠습니다. 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName ="SkillData",menuName ="Skills")]
public class SkillData : ScriptableObject
{
    public List<Skills> _skillList = new List<Skills>();
    [System.Serializable]
    public class Skills
    {
        public GameObject _skill;
        public string _skillName;
        public float _skillDamage;
        public float _skillUseMana;
        public int _skillLevel;
        public int _skillPrice;
    }
}

 

스킬의 프리팹을 받고, 스킬의 이름, 스킬의 데미지, 스킬의 소모 마나 등 데이터를 스크립터블 오브젝트로 관리해줍니다. 

 

 


메뉴 패널과 버튼 추가하기

마우스 우클릭 - Create Empty - Add Component - Horizontal Layout Group을 추가해준다. 아래와 같은 Horizontal 레이아웃 그룹은 자동으로 하위에 있는 아이템을 자동으로 정렬해주는 기능입니다.

 

 

이후 버튼을 5개를 만들어 주고 아래와 같이 네이밍을 한 뒤, 크기조절과 폰트, 텍스트 설정까지 해줍니다.

 

오른쪽 텍스트 부분은 클릭해서 확대해 확인하세요.

그럼 오른쪽 상단 그림과 같이 버튼이 정렬이 된다. 그 다음으로 이제 각 패널 버튼에 맞는 패널을 구성 해주겠습니다. 우선 패널의 완성 된 모습을 한번 확인해 보겠습니다. 아래와 같이 전투를 플레이어가 직접 할수 있는 버튼형 스킬 프리셋과 장비 장착을 한눈에 확인할수 있는 장비 프리셋, 그리고 플레이어의 체력, 레벨, 경험치, 공격력 등과 같은 능력치가 속해있는 레이아웃 입니다.

 

 

레이아웃 배치는 다음 그림과 같이 하므로 자세한 설명은 생략하고 중요한 요소들만 선택 설명 하도록 하겠습니다. 먼저 스킬 프리셋은 플레이어의 Input을 감지할 수 있게 버튼으로 만들어 줍니다. 그리고 장비 프리셋에는 착용한 장비가 들어갈수 있게 Image로 프리셋 설정을 해주고 인벤토리에서 장착을 했을때 Image를 스왑할수 있게 해줄겁니다.

 

다음은 능력치 창 입니다. 먼저 가장 눈에 띄는 Hp바와 Mp바, 그리고 경험치 바가 있습니다. 만드는 방법은 다음과 같습니다

마우스 우클릭 - UI - Slider 을 생성해주시고 Slider의 특성을 살펴보도록 하겠습니다.

 

 

동그란 부분은 '핸들' 이라고 불리는 요소입니다. 우리는 수동으로 조절하는게 아닌 자동으로 조절할 것이므로 핸들을 제거 해줍니다. 그러면 백그라운드와 Fill Area가 남습니다. 백그라운드에 는 바의 빈칸을 표시하는 에셋 그리고 Fill Area 안에 Fill 부분에는 색칠한 요소를 넣어주면 Hp바가 완성됩니다. 하지만 처음 Slider의 max 값인 1로 변경하면 아래와 같이 전부 차지 않습니다.

 

 

그래서 FIll Area와 Fill을 T를 눌러서 끝까지 조절해주면 꽉 차게 됩니다. 이렇게 전투 패널의 요소 배치 설명까지 완료했습니다. 완성된 이미지 레이아웃을 보고 스스로 배치를 해보는 시간을 가져봅니다.

 


메뉴 패널 추가 - 스킬 패널 

메뉴패널 추가의 스킬 패널 버전 입니다. 먼저 PlayerUpGrade의 레이아웃을 배껴서 스킬에 맞는 설명과 내용으로 바꿔줍니다. 그리고 왼쪽으로 요소를 밀어서 아래와 같이 배치해줍니다.

 

 

그리고 스킬 장착 프리셋을 제작하겠습니다. 이번엔 부모 요소를 CreateEmpty로 만들고 Add 컴포넌트로 Vertical Layout Group을 추가 해줍니다. 이 버티컬 레이아웃 그룹은 가로가 아닌 세로로 하위 아이템을 정렬하게 됩니다.

 

 

그리고 전체 배치가 된 모습입니다. 아래의 사진을 보고 레이아웃 배치를 스스로 완성 시킬수 있도록 해보세요.

 

 

이상으로 프로젝트 개발일지 4일차였습니다. 

'MakeNote' 카테고리의 다른 글

Project - 남겨라 프로젝트 +5일차  (0) 2022.06.28
Project - 남겨라 프로젝트+3일차  (0) 2022.06.15
Project - 남겨라 프로젝트 +2일차  (0) 2022.06.08
졸업 프로젝트 기획서  (0) 2022.05.25
Sub Project - Food And Slash  (0) 2021.12.30