본문 바로가기

유니티

Unity. Windows 플랫폼에서 키보드 입력 막기 유니티는 Input 클래스와 비교적 최근 새로 추가된 InputSystem 클래스를 통해서 사용자의 입력을 받고 처리할 수 있습니다. Legacy 방식인 Input 클래스로는 유니티 게임 루프의 Update에서 Input.GetKeyDown, GetKeyUp 등의 이번 루프의 프레임에서 해당 키가 눌러지기 시작했거나 끝났는지 확인 하는 방식을 취합니다. Input System에서는 이벤트 방식으로, 어떤 키 입력에 대해 액션 이벤트를 트리거할지 정해두고, 이벤트에 델리게이트를 등록해두고 들어오는 신호를 토대로 입력을 핸들링합니다. Input System의 경우에는 글로벌한 스위치가 있어, 플레이어의 입력을 의도적으로 모두 차단 할 수 있는데요. Input 클래스는 그런 기능을 따로 제공해주고 있지 않습니.. 더보기
Go: 테스트용 간단 REST API 앱 유니티 엔진에서의 리서치 도중 REST API를 통한 로그인 기능 구현을 할 일이 생겼습니다. 작년이었더라면 웬만한 작업들은 C#으로 해결하려고 ASP.NET Core로 눈을 돌렸을텐데요. 복잡한 기능 명세가 필요하지 않았고 이를 위해 적합한 새로운 언어가 있을거라는 생각에 GoLang을 이용해보기로 했습니다. 유니티 클라이언트에서는 HTTP로 적절한 헤더를 포함시킨 요청을 작성하여 보내고 응답을 받아 처리하는 로직을, GoLang에서는 라우팅에 따라 적절한 요청을 처리하고 결과를 응답하는 로직을 작성합니다. 라우터로는 메인테이닝이 이루어지지 않은지 꽤 된 것 같지만 13K의 Star를 보유하고 있는 julienschmidt/httprouter를 사용했습니다. https://github.com/julie.. 더보기
ABS: 패킷 타입 자동 생성 1. 본 방법론은 다른 자료나, 책, 강의를 가져다 디자인 것이 아니며, LiteNetLib의 기본 라이브러리 예제와 MessagePack 예제를 참고하여 제작중인 게임의 특징에 따라 여러차례 리팩토링을 거쳐 정착한 방식입니다. 특출나거나, 독자적인 방식이 아니며 상황에 다소 의존적일 수 있어 모든 상황에 알맞는 예제는 아님을 밝힙니다. 2. 강의 글이 아닌 기록 남김이라 코드는 이해를 돕기 위한 이미지만 첨부합니다. 오토 배틀 시뮬레이터는 UDP를 기반으로 한 네트워크 플레이를 기반으로 개발되었습니다. 게임은 데디케이트 서버에서 진행되며, 각 게임 진행상황과 데이터 변동을 패킷으로 묶어 처리합니다. 서버에서 클라이언트로 보내지는 모든 패킷은 헤더에 포함된 패킷 정보로 타입을 식별하고 데이터 영역을 클라.. 더보기
Unity: FormerlySerializedAs For Shader 셰이더 프로퍼티 이름 변경시 데이터 보존 방법 유니티에서는 FormerlySerializedAs라는 Attribute를 지원합니다. 유니티 에디터는 어떤 인스턴스(프리팹, 씬)를 저장할 때, 필드의 이름을 기준으로 데이터를 저장합니다. 만약 어떤 변수의 이름을 수정한다면, 이전에 작업해 두었던 수치 정보를 잃게됩니다. FormerlySerializedAs는 이런 상황으로부터 도움을 줄 수 있습니다. https://docs.unity3d.com/ScriptReference/Serialization.FormerlySerializedAsAttribute.html Unity - Scripting API: FormerlySerializedAsAttribute Success! Thank you for helping us improve the quality of.. 더보기
Unity: 특정 기기에서 텍스처가 특정 축으로 반전되어 보일 때 다양한 기기들은 다양한 그래픽 아키텍쳐를 기반으로 구동됩니다. DX, OpenGL, Vulkan, Metal 등 굵직한 것만 해도 4개입니다. 일부 아키텍처끼리는 좌표계와 텍스처 UV에서 (0,0), (1,1)이 위치한 곳이 비슷하게 공유되기도 하지만, 그렇지 않은 아키텍처도 존재합니다. 보통은 빌드세팅에서 Auto API로 대응시 어느정도 해결되지만, 셰이더를 직접 구성한 경우에는 대응을 위해서 셰이더 코드에서 #define 전처리기를 이용해 뒤집어주는 식으로 작업할 수 있습니다. #if UNITY_UV_STARTS_AT_TOP float scale = -1.0; #else float scale = 1.0; #endif o.uvgrab.xy = (float2(o.vertex.x, o.vertex.y*s.. 더보기
Unity: URP 스냅드래곤 빛 번짐, 스페큘러가 하얗게 타는 현상 보호되어 있는 글입니다. 더보기
Unity: 게임 클라이언트 프로그래머 기술 면접 키워드 리스트 C# 의 이해 언어 스펙 구조체와 클래스 (필드 크기의 합이 16 byte가 넘는 구조체가 Heap 할당이 발생한다는 정보는 잘못되었음에 주의하세요) 인터페이스와 추상, 가상함수 상속과 다형성 배열과 리스트 namespace partial 객체지향(추상화, 캡슐화, 상속성, 다형성) 지역변수와 전역변수 delegate와 event 차이 유니티와 C#의 관계 메모리 힙 할당 되는 케이스와 아닌 케이스 오브젝트 타입에 밸류 타입을 대입하면 생기는 일 박싱과 언박싱 가비지에 대하여 세대별 가비지 컬렉션 LOH, SOH (라지 오브젝트 힙, 스몰 오브젝트 힙) 최신 기능 패턴 매칭 Nullable 유니티에 대한 이해 기능 코루틴과 Invoke 게임루프와 델타 타임에 대한 이해 CLR과 유니티 Mono Mono와.. 더보기
Unity: 헷갈리기 쉬운 에디터 개념. Edit Mode, Play Mode 유니티에디터는 빌드과정을 거쳐 플레이하는 것과 유사하게 빠르게 플레이 테스트를 해 볼 수 있는 Play Mode를 지원합니다. 에디터 상단에 위치한 재생, 일시정지, 다음프레임 심볼의 버튼들이 Play Mode로 넘어가도록 도와주는 주인공들입니다. 요즘에서야 게임엔진이라면 당연히 갖춰야 할 기능으로 받아들여지지만, 초기의 게임 엔진에서는 그렇지 못했고 컴파일과 빌드를 거쳐서야 플레이테스트를 해볼 수 있었습니다. Edit Mode : 유니티 에디터에서 PlayMode 상태가 아닐 때 (평상시) Play Mode : 유니티 에디터에서 Play 중인 상태 (실행 테스트) 에디터에서 빌드를 거쳐 스탠드어론으로 컴파일 된 후 실행되는 것은 플레이모드가 아닙니다. 에디터와 런타임은 대립되는 위치에 있는 용어가 아닙.. 더보기