목록Unity (24)
I'm FanJae.
1. 정의- 싱글톤 패턴은 특정 클래스의 객체가 프로그램 전체에서 단 하나만 존재하도록 보장하고, 어디서든 그 객체에 접근할 수 있게 만드는 디자인 패턴이다.- Unity에서는 보통 GamaManager , SoundManager , UIManager 처럼 게임 전체에서 하나만 존재해야 하는 관리자 객체에서 자주 사용한다. public static GameManager Instance { get; private set; }- 위 코드는 외부에서 GameManager.Instance 로 접근할 수 있지만, Instance 를 바꾸는 것은 클래스 내부에서만 가능하게 만든다.2. 필요한 이유- 게임에서는 여러 오브젝트가 같은 관리자 객체에 접근해야 하는 경우가 많다.- 예를 들어 점수를 올릴 때마다 매번 Ga..
1. 문제 상황- 스터디 멤버들과 함께 과제 없을 때 간단한 팀 프로젝트를 진행하던 중 이와 같은 문제가 발생했다.- 0529 옆에 적었던 한글이 깨져서 나오는 문제가 발생한 것이다.2. 원인 추적 과정① 인코딩 관련 문제- 이전에도 비슷한 문제를 경험한 적이 있기 때문에 인코딩 관련 문제라는 것은 알고 있었다.- 저장 인코딩 위치를 바꾸는 위치를 정확히 몰랐지만 팀원이 알려준 방식으로 처리했다.3. 해결 방법- Unity에서 .cs 파일을 열어서 Visual Studio 창으로 들어간다.- Visual Studio 에서 도구 - 옵션 탭으로 이동한다.- 해당 설정이 보통은 기본으로 체크가 되어 있지 않으므로, 특정 인코딩을 사용해 파일 저장을 누르고 유니코드(서명이 있는 UTF-8) - 코드 페이지 6..
1. 정의- 코루틴은 실행 도중에 잠시 멈췄다가, 특정 조건이 만족되면 중단된 지점부터 다시 실행되는 함수다. 일반 함수는 호출되면 한 프레임 안에서 로직을 끝내고 반환된다. 하지만 코루틴은 중간에 yield return 을 사용해서 실행을 잠시 멈출 수 있다.void Test(){ Debug.Log("시작"); Debug.Log("끝");}- 하지만 코루틴은 중간에 yield return을 사용해서 실행을 잠시 멈출 수 있다. IEnumerator TestCo(){ Debug.Log("시작"); yield return new WaitForSeconds(1.0f); Debug.Log("1초 뒤 실행");}- 코루틴은 여러 프레임에 걸쳐 동작을 처리할 때 유용하다고 설명한다. S..
1. 정의- Find 계열 메서드는 씬 안에 존재하는 GameObject나 특정 Component를 코드에서 검색할 때 사용하는 기능이다.- 크게 보면 Find 계열은 두 개의 종류로 나뉜다. 종류를 나눈 근거는 씬 전체에서 오브젝트를 찾는 방식인가, 자식 또는 부모 방향에서 컴포넌트를 찾는 방식인가에 따라 뉜다. ① 씬 전체에서 object를 찾는 방식GameObject.Find()GameObject.FindWithTag()GameObject.FindGameObjectsWithTag()FindAnyObjectByType()FindObjectsByType() ② 특정 오브젝트의 자식 또는 부모 방향에서 Component를 찾는 방식GetComponentInChildren()GetComponentInPar..
1. 문제 상황 - 아래 처럼 의도했던 회전의 형태가 나오지 않고, 포신이 뭉개지는 현상이 있었다.2. 원인 추적 과정(1) 터렛과 포신이 각각 바라보는 방향이 달라서 생기는 문제- 탱크 구조에서 터렛과 포신의 계층은 각각 이렇게 설계된다.Turret└── Gun - 터렛과 포신이 바라보는 방향이 서로 달라서 회전축이 어긋난 것이라고 생각했다.- 각 오브젝트의 Transform 축 방향과 forward 방향을 확인했고, 이를 동일하게 맞췄지만 해결되지 않았다. (2) 최상위 부모였던 차체 오브젝트의 비균등 Scale, 그 영향으로 자식인 터렛의 Local 회전축이 왜곡되는 문제- 처음 내가 짰던 구조에서는 TankMainBody가 차체였다.- 즉, 아래쪽에 있는 초록색 사각형(빨간색으로 칠한 부분)이 그..
1. Canvas란- Canvas는 Unity UI가 배치되고 렌더링이 되는 영역이다.- Image, Text, Button, Panel, Scroll View 등등.. 다양한 UI 요소는 기본적으로 Canvas 아래에 배치된다.- UI는 일반 Transform이 아니라 RectTransform을 사용한다※ UI는 단순히 화면에 렌더링을 해주는 기능이 아닌, 해상도 대응, 입력 처리, 배치 기준을 함께 고려해서 처리해야 한다.2. Canvas Render Mode- Canvas에는 대표적으로 3가지 렌더링 방식이 있다.① Screen Space - Overlay- 카메라와 상관없이 화면 위에 UI를 바로 렌더링하는 방식이다.- 일반적인 HUD, 체력바, 메뉴 UI에서 많이 사용되는 기법이다. ② Scre..
1. Raycast와 범위 검사의 차이- Raycast는 특정 위치에서 특정 방향으로 광선을 쏴서 검사한다.- 반면 Overlap 계열과 Check 계열은 특정 범위 안에 Collider가 있는지 검사하는 방식으로 사용한다.2. Overlap 계열- Overlap 계열은 특정 범위 안에 들어온 Collider를 가져온다.- 즉, 범위 안에 어떤 대상이 있는지 확인할 때 사용한다. ① 대표 메서드Physics.OverlapSphere()Physics.OverlapBox()Physics.OverlapCapsule()② 사용 예시Collider[] hits = Physics.OverlapSphere(transform.position,detectRadius,targetLayer);foreach (Collider..
1. Raycast 복습- Raycast는 시작 위치에서 특정 방향으로 광선을 발사한다.- 이 특정 방향으로 광선을 쏴서 가장 먼저 닿은 Collider를 검사하는 기능이다.- 이미지로 본다면, 대충 이런 느낌. 특정 Object에 있는 Collider를 확인한다. 이때, Raycast 는 가장 먼저 맞은 대상 하나를 검사하지만, RaycastAll 은 Ray에 맞은 여러 대상을 배열로 가져온다.2. Tag와 Layer의 차이① Tag- 오브젝트의 정체성을 구분한다.Player, Enemy, Boss, Item- 주로, 이 오브젝트가 무엇인지를 분류하기 위한 용도로 사용한다. ② Layer - 오브젝트의 물리/렌더링/검사 대상으로 어떻게 처리할지를 구분한다.- Raycast 필터링, 충돌 제어, 카메라 ..
1. 정의- RayCast는 특정 위치에서 특정 방향으로 보이지 않는 광선을 쏴서, 그 경로에 있는 Collider를 검사하는 기능이다.- 내 앞에 뭐가 있는가?- 마우스로 클릭한 위치에 무엇이 있는가?- 바닥에 닿아 있는가?- 시야에 장애물이 있는가?- Ray가 Collider와 교차하면 true를 반환하고, RaycastHit를 통해 충돌 정보를 얻어올 수 있다.2. 필요한 이유- RayCast는 실제 물리 충돌이 일어나기 전에 검사를 하기 위해 사용한다.- 플레이어 앞 상호작용 오브젝트 감지- 바닥 체크- 벽 감지- 시야 체크- 총알 히트 스캔- 마우스 클릭 대상 판별- 장애물 감지- 즉, RayCast는 부딪힌 뒤에 처리하는게 아니다. 미리 확인하는 것이다.3. 기본 구조Physics.Raycas..
1. 정의- 프리팹(Prefab)이란, 파일 형태로 재사용이 가능한 오브젝트를 말한다.- 게임 오브젝트의 다음 정보를 하나로 저장해두고 필요할 때 동일한 형태로 생성이 가능하다.- GameObject 구조- Component 구성- Component 설정 값- 자식 오브젝트 구조- Transform 기본 상태- 연결된 리소스(Material, Sprite 등)2. 필요한 이유- 게임 개발에서는 같은 오브젝트를 여러 번 생성해야 하는 상황이 많이 발생한다.Ex) 적 캐릭터, 총알, UI 버튼, 이펙트, 아이템 등등..3. 적용하지 않는 경우 발생하는 문제① 중복 작업 증가- 같은 오브젝트를 여러 번 수동 생성해야 하는 문제가 발생한다. ② 유지 보수 어려움- 특정 오브젝트를 수정해야 한다고 할 때를 생각 ..