ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • UI 정보 패널 & 미니맵
    연습 프로젝트/2D로그라이크 게임

     

    현재 작업 진행중인 영상 입니다.

    플레이어 정보 패널과 미니맵 UI 연결 과정 작업을 진행하였습니다.

     

    하이어라키
    Manager 스크립트 인스펙터창

    가장 먼저 유니티 하이어라키 창에서 Manager 스트립트를 만들고 Static 변수로 만들고 플레이어의 정보 들을 담은 PlayerInfomations 스크립트와 UI를 다룰 uiManager 스크립트를 public으로 인스펙터 창 에서 연결해 주어 접근을 용이하게 했습니다.

     

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Manager : MonoBehaviour
    {
        public static Manager Instance = null;
    
        public PlayerInfomations playerInfomations;
        public UIManager uiManager;
    
    
    
        private void Awake()
        {
            if (Instance == null)
            {
                Instance = this;
                DontDestroyOnLoad(this.gameObject); 
            }
            else if (Instance != null && Instance != this)
            {
                Destroy(this.gameObject);  
            }
        }
    
    
    }

    또한 다음 스테이지 및 씬 변화를 방지하여 DontDestroyOnLoad() 함수로 파괴되는것을 방지하였습니다.

     

    먼저 플레이어 정보 들이 담길 PlayerInpomations 스크립트를 살펴 보겠습니다.

    public class PlayerInfomations : MonoBehaviour
    {
        public float playerLevel = 1;
    
        public float playerHpMax = 0f;
        public float playerHp = 0f;
    
        public float playerAtk = 0f;
        public float playerDef = 0f;
    }

    현재 플레이어의 레벨, 최대 체력, 체력, 공격력, 방어력 으로 총 5가지 변수들이 선언되어 있습니다.

     

    [SerializeField] private TextMeshProUGUI playerLevelText;
    
    [SerializeField] private TextMeshProUGUI playerHpMaxText;
    [SerializeField] private TextMeshProUGUI playerHpText;
    
    [SerializeField] private TextMeshProUGUI playerAtkText;
    
    [SerializeField] private TextMeshProUGUI playerDefText;
    
    private void Update()
    {
        playerLevelText.text = Manager.Instance.playerInfomations.playerLevel.ToString();
    
        playerHpMaxText.text = Manager.Instance.playerInfomations.playerHpMax.ToString();
        playerHpText.text = Manager.Instance.playerInfomations.playerHp.ToString();
    
        playerAtkText.text = Manager.Instance.playerInfomations.playerAtk.ToString();
    
        playerDefText.text = Manager.Instance.playerInfomations.playerDef.ToString();
    }

     

    각 해당 목록의 텍스트 들을 인스펙터 창 에서 연결시켜 주어 Manager 스크립트 > PlayerImfomations 스크립트 에 접근하여 각 변수들의 값을 가져와 주었습니다.

     

        private void Start()
        {
            Manager.Instance.playerInfomations.playerAtk = playerDamage;
            Manager.Instance.playerInfomations.playerHp = playerHp;
            Manager.Instance.playerInfomations.playerHpMax = playerHp;
        }

    ( Manager 스크립트 > PlayerInfomations 스크립트 의 각 변수에 적용하는 모습)

     

    현재 플레이어의 피격 이나 공격 동작 구현은 제대로 구현이 되어있지 않기 때문에 초기값만 설정이 되어 있는 상태이며

    PlayerAttack 스크립트의 Start 함수에서 공격력과 최대 체력, 체력 을 설정해 주었습니다.

     

    *레벨과 방어력은 현재 PlayerInpomations 스크립트 내에 설정된 값 입니다.

     

    다음 으로는 미니맵 입니다.

     

    미니맵 구현은 RenderTexture를 이용하였습니다.

     

    Unity 내에서 Camera 1대와 UI인 RawImage를 생성 하여 각 TextureRenderTexture를 입혀주는 방식으로 처리를 하였습니다.

     

    특이 사항으로는 현재 2D 프로젝트기에 카메라를 아무리 멀리 두어도 현재 씬을 보여주고 있는 카메라의 시야와 시야각이 동일하여 차이가 없게 되는 사소한 문제가 있었는데, 카메라의 인스펙터 속성에 있는 Size를 조정하여 해결하였습니다.

     

    또한 미니맵에서 플레이어와 몬스터를 상세히 보기보단 간단한 형태로 눈에 띄게 보여지게 하기 위해

     

    플레이어와 몬스터에게 Circle를 생성해 주어 색상을 조정해 주어 구현을 해보았습니다.

     

    1. 생성한 Circle에 레이어를 Minimap 레이어로 변경하여 주기

    2. 씬을 촬영 하고 있는 카메라는 인스펙터 창에 있는 속성 CullingMaskMinimap 레이어를 가진 오브젝트를 보이지 않게 하기

    3. 미니맵을 촬영 하고 있는 카메라는 인스펙터 창에 있는 속성 CullingMaskMinimap레이어와 Ground 레이어를가진 오브젝트 보이게 하기

     

    이로 인하여 현재 씬에서 보고 맵 보다 더 폭 넓게 볼 수 있는 미니맵이 완성되었습니다.

     

    *미니맵 줌 인/아웃 기능은 카메라의 Size를 조정 하면 되며 기능 구현을 했었다가 삭제하였습니다.

    (현재는 불필요한 UI 요소로 판단하였습니다.)

     

    감사합니다.

     

    + 추가로 PlayerInpomations의 스크립트 변수를 조정하여 UI에 적용되는 영상을 첨부하였습니다.

     

     

    '연습 프로젝트 > 2D로그라이크 게임' 카테고리의 다른 글

    UI 공격 & 대쉬 버튼  (0) 2024.06.09
    UI 아이템 패널 - 물약  (0) 2024.06.09
    UI 기획 (1차)  (0) 2024.06.08
    몬스터 상태 구현 (Update)  (0) 2024.06.08
    몬스터 상태 구현  (0) 2024.06.07

    댓글

김효겸 / Tel. 010-7735-0580 / E-mail. dollzzang2@hanmail.net