코드 컨벤션한 프로젝트에서 여러 명이서 같이 작업을 할 때 준수해야 하는 명확한 규칙 또는 지침 세트를 제공하는 가이드이다.코드 컨벤션 규칙을 준수하면 서로 작업한 코딩을 읽고, 관리하는 유지보수에 매우 용이하다.회사의 프로젝트의 코드 컨벤션은 약간의 차이가 있긴 하지만, MSDN에서 제공하는 일반적인 C# 규칙을 따르는 게 기본이다. .NET 코딩 규칙 - C#C#에서 일반적으로 사용되는 코딩 규칙에 관해 알아봅니다. 코딩 규칙은 코드를 일관되게 표시하고 코드 복사, 변경 및 유지 관리를 용이하게 합니다. 이 문서에는 문서 리포지토리 코딩 지침도learn.microsoft.com이 문서는 부트 캠프를 진행하면서 팀원들과 유니티를 사용하면서 정한 코드 컨벤션을 정리한 문서이므로, 이 코드 컨벤션이 무조건..
기술 소개유니티를 Monobehaviour 클래스에 생명주기(Life Cycle) 중에 가장 많이 쓰이는 Update 클래스가 존재한다.Update 클래스는 프레임 당 한번 호출되는 클래스로 프레임 업데이트를 위한 주요 작업 함수이다.해당 클래스를 잘 제어하지 못하고 Update 클래스에 의존만 한다면 프레임 드롭같이 최적화 문제가 발생할 수도 있다.그래서 P.P.R 프로젝트에서 전반적인 게임 플레이를 Update 사용 없이 Coroutine으로 진행 루틴을 만들려고 한다.기술 설명YieldCache.cs : 코루틴 최적화/// Boxing 발생하지 않게 해주며, 의도치 않게 가비지가 생성되는 것을 방지class FloatComparer : IEqualityComparer{ bool IEqualit..
구현 소개안드로이드 모바일 하드웨어 버튼 중에는, 특히 백 버튼 일명 뒤로 가기 버튼을 누르면 상황에 적절한 행동을 수행하는지, 대응이 적절한지가 구글 피쳐드 검수 기준이라는 말도 이미 알려져 있는 상황이다. 모바일 출시를 위해서는 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..
Sprite Atlas일반적으로 Unity는 씬의 각 텍스처에 대해 드로우 콜을 발행합니다. 하지만 많은 텍스처가 포함된 프로젝트의 경우 여러 개의 드로우 콜이 존재하면 리소스를 많이 소비하여 프로젝트의 성능을 저하시킬 수 있습니다.스프라이트 아틀라스(Sprite Atlas)는 여러 개의 텍스처를 단일 텍스처로 결합하는 에셋입니다. Unity는 여러 개의 드로우 콜을 발행하는 대신 이러한 단일 텍스처를 호출함으로써 하나의 드로우 콜을 발행할 수 있습니다. 그러면 큰 성능 소모 없이도 패킹된 텍스처에 동시에 액세스 할 수 있다.기능 구현Asset > Create > Sprite Atlas로 아틀라스 생성, 생성한 아틀라스 내의 들어갈 이미지 폴더를 넣어 Packing 관련 링크 스프라이트 아틀라스 - Un..
구현 소개방치형 게임 특성상 재화를 많이 버는 만큼 여러 스탯을 강화하는데 그 강화 횟수는 방대한 편이다.이걸 일일이 버튼을 누르면서 강화하면 유저들의 불편함이 생김, 이를 해소하고자 롱 버튼 기능을 구현해야 한다.기능 구현롱 버튼 제어 private void OnPointerDown(PointerEventData eventData){ isPointerDown = true; pressTime = DateTime.Now; StartCoroutine(HoldPressListener());}private void OnPointerUp(PointerEventData eventData){ isPointerDown = false; isHoldPressed = false; upgrad..
기능 구현Firebase 에서 제공중인 Realtime DB를 이용해 랭킹 시스템을 구현LINQ 메서드 정렬이 적용이 안되므로 VerticalLayout을 역정렬로 표현 내림차순 구현int rank = (int)snapshot.ChildrenCount;foreach (DataSnapshot userSnapshot in snapshot.Children){ string userName = userSnapshot.Child("name").Value.ToString(); string userScore = userSnapshot.Child("score").Value.ToString(); var uiUserRank = Manager.Resource.InstantiatePrefab("UserR..
테스트 환경갤럭시 S20+, 갤럭시 플립4이슈 내용16 : 9 비율로 해상도 작업을 해오고 빌드 후, 팀원들에게 APK 배포 후 실행을 했을 때, 진행에 큰 문제는 없지만각자 다른 해상도에서 나오는 화면이 불균형하게 나타났다.재현 스텝APK 빌드 후, 각자 팀원들에게 배포된 APK 실행각자 다른 모바일 비율 환경에서 UI 해상도가 불균형하게 나오는 현상이 발생해결 방법UI Main Scene 부분은 Anchor 포지션을 수치가 아닌 pivot 값 수정으로 해결UI Canvas에서 Canvas Scaler 부분에서 Match 비율 조정을 Width = 0으로 고정문제 해결16:9 ~ 23:9까지 세로 비율 크기 상관없이 고정된 위치에 배치되도록 수정 완료추가적으로 뒤에 전투 부분은 따로 스크립트로 수정이 필요
기능 소개유저 데이터(Firestore)와 인벤토리 데이터(json)가 별개로 작동하여 시스템이 제대로 구축이 안 되어있음Firestore에 저장되는 데이터는 일일 사용량에 제한이 있어, 추후 출시에 문제가 발생할 수 있음그리고 Editor 내에서는 작동되지만 APK 빌드 후 인벤토리 저장에 문제가 발생⇒ 해당 3가지 트러블을 해결하기 위해 데이터 통합 작업을 진행기능 구현Data Savepublic void SaveToUserProfile(string fileName = "game_user.dat"){ string filePath = $"{Application.persistentDataPath}/{fileName}"; string json = JsonConvert.SerializeObject..
테스트 환경Unity Editor 2022.3.15이슈 내용유니티 APK 빌드 후, 플레이가 정상적으로 실행이 안 되는 이유를 디버깅으로 찾다가 해당 부분에서 에러가 발생private string _jsonPath = $"{Application.dataPath}/Resources/Texts/Stage/StageData.json";_tableText = File.ReadAllText(_jsonPath); // ($"{{\\"stageDataTable\\":{_tableText}}}");재현 스탭APK 빌드 후, 안드로이드 시뮬레이터를 통해 실행해당 코드 부분에서 파일을 읽어 올 수 없어서 다음 스크립트 진행이 불가해결 방법Application.dataPath는 에디터에서는 파일 경로를 잘 읽어오지만 플랫폼..