구현 소개안드로이드 모바일 하드웨어 버튼 중에는, 특히 백 버튼 일명 뒤로 가기 버튼을 누르면 상황에 적절한 행동을 수행하는지, 대응이 적절한지가 구글 피쳐드 검수 기준이라는 말도 이미 알려져 있는 상황이다. 모바일 출시를 위해서는 UI 뿐만 아닌 하드웨어에 대한 대응 기능도 구현해야 한다.기능 구현public class UIPopup : UIBase{ ... private void Update() { if (Input.GetKeyDown(KeyCode.Escape)) { Manager.UI.ClosePopup(); } }}기존 UIPopup들은 이미 내부적으로 스택을 통해 관리되어 있어서, 버튼을 통한 닫기만 구현하여 간단하..
노치 디자인 & 펀치홀 디스플레이스마트폰의 화면을 최대한 활용하기 위한 디자인 기법상단부에 카메라, 스피커 및 센서 등을 몰아넣어 화면의 일부가 파여있는 형태를 말한다.기능 구현유니티 시뮬레이터로 여러 핸드폰 기기를 확인하다 보면 상단과 같이 SafeArea로 노란색 범위를 확인할 수 있다. SafeArea를 통해 UI Canvas에 Notch에 대응할 수 있게 코드를 작성한다.SafeAreaFitter.cs[RequireComponent(typeof(RectTransform))]public class SafeAreaFitter : MonoBehaviour{ private void Awake() { var rectTransform = GetComponent(); var..
구현 소개방치형 게임 특성상 재화를 많이 버는 만큼 여러 스탯을 강화하는데 그 강화 횟수는 방대한 편이다.이걸 일일이 버튼을 누르면서 강화하면 유저들의 불편함이 생김, 이를 해소하고자 롱 버튼 기능을 구현해야 한다.기능 구현롱 버튼 제어 private void OnPointerDown(PointerEventData eventData){ isPointerDown = true; pressTime = DateTime.Now; StartCoroutine(HoldPressListener());}private void OnPointerUp(PointerEventData eventData){ isPointerDown = false; isHoldPressed = false; upgrad..
기능 구현미니맵 구현에 필요한 Fields#region Fields[SerializeField] private Transform miniRoomContainer;private float cellWidth;private float cellHeight;private GameObject miniRoomPrefab;private GameObject[,] miniRoomArray;private Vector2Int currentPlayerCoordinate;private List visitedCoordinates = new List();#endregionminiRoomContainer : 미니맵 셀들이 배치되는 Transform ParentcellWidth : 미니맵 셀의 너비cellHeight : 미니맵 셀의 높..
📌 참석 인원 표시하기현재 참석한 인원의 이름을 표시하는 커뮤니티창 구현이름 교체시 커뮤니티에 등록된 이름도 같이 교체 📌 구현 결과 인원 표시 창을 나타내게 하는 버튼과 현재 인원을 표시하는 리스트 창을 만들어 둔다. 📄 UI_Scene_Main.cs private void InitViewCommunity(){ communityShowBtn.onClick.AddListener(ShowCommunity); communityHideBtn.onClick.AddListener(HideCommunity); Manager.Game.CommunityList = communityList; // 등록할 커뮤니티창 게임매니저에서 설정}private void ShowCommunity(){ c..
📌 메인 화면 캐릭터 정보 변경메인 씬에서 캐릭터 정보 변경캐릭터 이미지 교체와 이름 변경 가능 📌 구현 결과 메인 화면 좌측에 Left Side를 구성하고 해당 버튼에 기능을 설명하는 Text를 배치함.버튼을 누르면 해당 패널을 SetActive로 설정하여 패널을 불러오도록 한다.캐릭터 교체 창은 전에 작업했던 로비 씬에서 작업한 에셋을 그대로 가져와서 사용했다.똑같이 토글 방식으로 캐릭터를 누르고 버튼을 눌러서 교체가 가능하다.한가지 추가 기능으로는 선택 창이 활성화 되었을 시, GameState로 플레이어 조작을 제어하고, 교체랑 x버튼 이 외에는 다른 UI 버튼이 누르지 않도록 추가 했다.이름 교체 창도 똑같이 로비 씬에서 작업한 에셋을 그대로 가져와서 사용했다.화면 제어 부분도 위에 선택 창..
📌 캐릭터 선택 창캐릭터 이미지를 선택하고 선택한 캐릭터가 인게임에 나오도록 구현 📌 구현 결과public enum LobbyStep{ Start, Select, Input, Finish,}우선 캐릭터 생성 순서를 열거형 단계로 나눠서 표현한다.캐릭터 선택창 안에는 ScriptableObject로 저장된 CharacterBlueprint 수 만큼 가져와서 생성된다.📄 CharacterBlueprint.cs[CreateAssetMenu(fileName = "Character", menuName = "Blueprint/Character")]public class CharacterBlueprint : ScriptableObject{ [SerializeField] private ..
📌 현재 시간 표시인게임 내에서 실제 현재 시간을 표시하는 기능 구현 📌 구현 목록📄 Util.cspublic static string GetCurrntTime(){ // 현재 시, 분 출력 return DateTime.Now.ToString(("HH : mm"));}DataTime.Now를 출력하면 일/월/년도 시간:분:초 {오전/오후}가 표시된다.format을 지정하여 원하는 형태로 출력할 수 있다.[yyyy : 년도] [MM: 월] [dd : 일] [HH : 시] [mm : 분] [ss : 초] [tt : 오전, 오후]📄 UI_Scene_Main.cspublic class UI_Scene_Main : MonoBehaviour{ [SerializeField] private Te..
📌 캐릭터 아이디 입력InputField를 이용하여 아이디 입력입력된 아이디는 플레이어 아이디에 저장 📌 구현 목록🔧 Lobby Scene플레이어 아이디를 입력할 로비씬 생성간단하게 타이틀 제목 하나 넣고, 아이디를 입력할 InputField 랑 메인 씬으로 넘어갈 플레이 버튼 생성📄 UI_Scene_Lobby.cspublic class UI_Scene_Lobby : MonoBehaviour{ [Header("Input Field")] [SerializeField] private TMP_InputField idInput; [SerializeField] private Button playButton; private void Start() { idInput.on..