Game Development(20)
-
[Unity] 그래픽 최적화를 하는 방법들 (Low Polygon, Clipping Planes, Occlusion Culling)
게임 개발을 진행할 때, 처음에는 별 문제없이 잘 진행되다가 마지막에 테스트를 할 때 문제가 많이 발생한다고 한다. 그 중 하나가 바로 최적화 문제이다. 보통 성능이 좋은 컴퓨터에서 유니티를 통해 개발을 진행하기 때문에 프레임 드랍이나 속도 측면에서 문제가 있는 것을 알아차리기는 어렵다. 그러다가 나중에 베타 테스트 기간동안 성능이 떨어지는 컴퓨터나 모바일에서 구동했을 때 문제가 있음을 깨닫게 된다고 한다. 그래서 그 중, 그래픽에 의해 발생하는 프레임 드랍을 해결하는 방법을 알아봤다. 그래픽 최적화를 하는 기법들 1. 3D 모델링의 폴리곤(Polygon) 개수를 줄이는 방법 (디자인 영역) 디자이너 분들이 3D 모델링 작업을 할 때, 폴리곤(Polygon)을 통해 3D 모델 개체의 표면을 구성한다. 이..
2022.01.30 -
[Unity] New Input System #2 | 키 입력을 스크립트에 전달하여 처리하기
저번 글에서 기본적인 셋팅을 끝냈었다. 이번 글에서는 입력값을 스크립트(script)에 전달하는 방식 중 2가지 정도를 사용하여 로직을 제어하는 걸 해보고자 한다. Player 게임 오브젝트에 Player Input 컴포넌트를 부착했었다. 키를 입력했다면, 키보드로 들어온 입력값을 주인공 캐릭터에게 전달해줘야 한다. 1. 로직을 제어할 스크립트(script) 부착하기 Player 게임 오브젝트에 키 입력값을 전달받고, 해당 로직을 제어할 스크립트를 만들어서 붙여줬다. Send Messages, Broadcast Messages : 유니티의 Send Message 기능을 사용하여 특정 함수를 호출하는 방식 Invoke Unity Events, Invoke C Sharp Events : 유니티나 C#의 이벤..
2022.01.26 -
[Unity] New Input System #1 | 세팅하기
/* 수업 들으며 했던 내용들을 실습해보며 정리한 글입니다. 잘못된 부분이 있다면 말씀해주세요. */ 게임은 특정 플랫폼 하나만을 겨냥하고 개발하는 경우는 거의 없다. 스케일이 커지게 되면 PC 말고도 모바일, 콘솔 등의 플랫폼도 지원을 해야 할텐데, 그 중에서도, 기존 Unity Input System은 게임 플랫폼 환경 서비스를 추가할 때 골머리를 앓게하는 요소라고 한다. PC에서는 키보드와 마우스, 모바일은 화면 터치, 콘솔에서는 조이스틱을 이용하는 등 플랫폼마다 사용하는 입력 방식이 다르기 때문이다. 즉, 다음과 같이 코드를 짜게 되면 플랫폼 추가 확장할 때 게임 Input System을 수정해야 하는 번거로움이 생긴다. if(Input.GetKey(KeyCode.UpArrow)) // PC에서 ..
2022.01.26 -
[Unity] OnTriggerStay() 함수: 오브젝트의 변화가 감지되지 않으면 더 이상 호출되지 현상 해결법
적(Enemy) 게임 오브젝트에 탐지(Detect)를 담당하는 콜라이더를 달아 플레이어가 현재 적 오브젝트 탐지 영역 안에 있는지 체크하는 로직을 구현하려고 했었다. 탐지만 하고, 충돌 처리는 하면 안 되니 콜라이더의 Is Trigger 모드를 활용했다. 구현하고자 했던 로직 및 준비 작업 적은 평상시 상태(Idle)로 여기 저기를 돌아다님 플레이어가 적의 탐지 영역에 처음 들어온다면, 적은 경계 모드로 돌입 플레이어가 계속 적의 탐지 영역에 2초 이상 머무르고 있다면, 빠르게 돌진하여 공격하는 공격 모드 돌입 적이 공격 모드로 돌입 전에 탐지 영역에서 나간다면, 다시 평상시 상태로 돌입 리소스는 없고, 로직만 먼저 구현해보려고 해서 캡슐을 적(Enemy), 사각형을 플레이어(Player)로 설정했다. ..
2022.01.19 -
[Unity] Universal RP를 이용한 2D 빛(Light) 처리
/* 본 글은 Unity 2020.3.25f1 LTS 버전을 기반으로 작성되었습니다. */ 유니티 2D 프로젝트에서 일반적인 방법으로는 조명 처리가 되지 않는다는 사실을 발견했다. 구글에 검색 해보며 찾아보니, 2D에서는 빛(Light)이 존재하는 것이 아니라 빛을 흉내내는 여러 기법들로 표현을 해왔다고 한다. 광원에 가까이 있는 정점(Vertex)은 밝게 하고, 멀리 있는 정점은 어둡게 하거나 Material의 Shader 설정을 "Sprite/Diffuse"로 바꿔주는 등의 기법을 통해 빛의 처리를 표현해왔다고 한다. 그런데, 유니티 2D에서도 이제 빛 처리에 대한 패키지를 지원을 한다. URP(Universal Render Pipeline)이다. 이전 버전은 경량 렌더 파이프라인(LWRP)이라고 불..
2022.01.18 -
[Unity] 최적화를 위한 게임 오브젝트 태그(Tag) 비교 방법
태그(Tag)란? 유니티를 사용하다 보면, 스크립트에서 태그(Tag)를 이용해서 원하는 게임 오브젝트인지를 판별할 때가 자주 있다. 하지만 태그를 사용해서 비교를 하더라도 자칫 잘못하면 가비지 메모리를 잔뜩 생성할 수도 있다는 글을 본 적이 있다. 1. CompareTag() 메서드를 이용한 비교 (권장) pirvate void OnTriggerEnter2D(collider2D collision) { if(collision.CompareTag("Player")) //CompareTag() 메서드를 활용한 비교 { ... } } 2. string 문자열을 이용한 비교 (권장하지 않음) private void OntriggerEnter2D(collider2D collision) { if(collision.t..
2022.01.17