게임 개발 공부/Unity 8

빌드 리포트 인스펙터(Build Report Inspector)

빌드 apk 파일이 스토어에 올릴 수 있는 150MB를 넘어가서 Addressable로 전환하는 과정에 빌드에 포함되는 리소스가 어떤 것이 있는 알고 싶어져서 찾아보았다. 유니티 제공하는 SDK 중 Experimental로 제공하는 Build Report Inspector가 있어서 사용하였다. 에디터 버전 : 2022.3.37fSDK 버전 : Build Report Inspector 0.3.0-preview Experimental이기에 UPM(Unity Package Manager)에서 바로 받을 수 없고 아래와 같이 Add package by name을 통해 추가해서 받아야 한다.  Package name에 com.unity.build-report-inspector 를 입력하고 Add 버튼을 누르면 설..

LayerMask를 이용한 Layer 비교(feat.충돌 처리)

유니티에서 제공하는 LayerMask를 통해 해당 레이어와 오브젝트의 레이어를 비교한 뒤 충돌 처리를 하고자 한다. LayerMask는 레이어 전체 또는 다수의 레이어를 선택할 수 있는 Flag 이기 때문에 단순 비교연산자 '==' 으로 비교할 수 없으며, 비트 연산자 '&' 를 사용해야 한다. using UnityEngine;public class LayerMaskSample : MonoBehaviour{ public LayerMask targetLayerMask; private void OnTriggerEnter(Collider other) { if ((targetLayerMask & (1

Unity Script에서 HEX(Hexadecimal) 값으로 Color 변환하는 법

유니티에서 일반적으로 RGB 값 할당하여 Color를 가져온다. 예를들어 위의 Color 값을 가져오기 위해서 아래와 같이 코드로 작성하여 가져왔다. using UnityEngine; ... Color newColor = new Color(0.9622f, 0.8615f, 0.413f, 1f); 원하는 Color를 일일이 RGB 값을 써야한다는 것이 여간 불편한 일이 아니다. 이런 방식이 아닌 웹(HTML)에서 컬러 값을 가져올 때 사용하는 방식인 Hexadecimal(이하 HEX) 값을 사용하여 Color 값을 가져올 수 있다. 코드는 아래와 같이 작성하면 된다. using UnityEngine; ... Color setColor; ColorUtility.TryParseHtmlString("#7F7E83..

유니티 드로우콜

Draw Call - CPU가 GPU에게 연산 명령을 던져주는 것을 의미 - CPU와 GPU 는 병렬 관계로 처리하며, CPU가 GPU에게 명령을 던져줌으로 GPU가 랜더링과 같은 처리를 시작함 - CPU는 명령은 던져주고 나서 다시 자기 일을 처리하기 시작 - 만약 또 다시 CPU가 GPU에게 명령을 던져주려 할 때 GPU가 이전 처리가 완료되지 않았다면, CPU는 처리를 기다리게 됨 - CPU와 GPU는 서로 다른 프로세스 유닛이기에 통신 비용이 발생 - 랜더링하기 전에 CPU에서 수많은 정보를 설정해줘야 함 ex) Vertex Buffer, Alpha Blending, Use Z-Buffer, Trasnform, Texture, Shader, Change States, Draw 등 Command B..

New InputSystem 에서 마우스 스크롤(휠) 값으로 카메라 줌 만들기

기존 InputManager에서 InputSystem으로 갈아타면서 수정해주고 알아가야할게 많다. 마우스 스크롤 값 또한 구글링을 해도 잘 나와있지 않았다. > 먼저 InputActions에서 마우스 휠값을 받을 Actions을 생성해야 한다. > Action Type은 Pass Through로, Control Type은 Axis로 설정 한다. > 그리고 Actions 오른쪽의 +를 눌러 Add Binding을 눌러 바인드를 생성한다. > Path에서 Mouse를 누르고 아래쪽에 Scroll의 Y값을 받도록 설정한다. Action은 설정이 되었고, 스크립트를 보기전에 먼저 InputActions의 클래스를 생성해야 한다. 아래와 같이 Generate C# Class를 체크하고 Apply를 눌러 클래스를 ..

Cinemachine Free Look Camera 민감도 조절

Cinemachine Free Look Camera을 통해 캐릭터 화면 회전을 하게 되면 버벅이거나 끊겨서 움직여지는 것처럼 느껴질 것이다. 그 이유는 기본적으로 InputManager의 Mouse X, Mouse Y의 입력을 받기 때문인데, 민감도 설정이 1로 되어 있기 때문에 세밀한 움직임을 갖지 못하는 것이다. 조금 부드럽게 움직이고 싶으면 아래와 같이 하며 된다. 1. 상단의 Edit - Project Settings - InputManager를 연다. 2. InputManager에서 Mouse X와 Mouse Y의 Sensitivety(민감도) 값을 1보다 낮춰준다. (기본값 1은 윈도우 마우스 민감도와 같다.)

Command Pattern

Command Pattern is a behavioral design pattern taht turns a request int a stand-alone object that contains all information bout the request. 명령 패턴은 요청에 대한 모든 정보를 포함하는 독립 실행형 개체로 요청을 전환하는 행동 디자인 패턴이다. 플레이어에 대한 로직을 짤 때 초보적인 발상으로 PlayerController에 마구 때려넣는 식으로 코딩을 하는 경우 많다. 예를 들면 PlayerController에 Move()와 Jump(), Attack() 등등의 함수를 구현해놓고 그 안에서 사용한다. 이런 방식이 잘못된 것은 아니지만 결국 유지,보수에 치명적이며, 협업할 시 코드가 너무 많아져..

적 케릭터 닷지 회피 구현(Enemy Dodge System)

게임을 개발하던 중에 젤다의 전설 야생의 숨결에서 보코블린(적 케릭터)가 공격을 회피(닷지) 하는 것이 생각나서 구현해보았다. [SerializeField] private float dodgeChance = 0.3f; // 닷지 확률(0 ~ 1f 사이 값) [SerializeField] private float dodgeAngle = 30; // 반각 30도, 총 60도 각도 [SerializeField] private float dodgeDistance = 5f; // 닷지할 포인트 거리 [SerializeField] private float counterattackChance = 0.3f; // 닷지 후 반격 찬스 // 플레이어가 공격했을 때 Action을 작동 private void Awake() ..