본문 바로가기

Unity/작업방식

Unity. Windows 플랫폼에서 키보드 입력 막기 유니티는 Input 클래스와 비교적 최근 새로 추가된 InputSystem 클래스를 통해서 사용자의 입력을 받고 처리할 수 있습니다. Legacy 방식인 Input 클래스로는 유니티 게임 루프의 Update에서 Input.GetKeyDown, GetKeyUp 등의 이번 루프의 프레임에서 해당 키가 눌러지기 시작했거나 끝났는지 확인 하는 방식을 취합니다. Input System에서는 이벤트 방식으로, 어떤 키 입력에 대해 액션 이벤트를 트리거할지 정해두고, 이벤트에 델리게이트를 등록해두고 들어오는 신호를 토대로 입력을 핸들링합니다. Input System의 경우에는 글로벌한 스위치가 있어, 플레이어의 입력을 의도적으로 모두 차단 할 수 있는데요. Input 클래스는 그런 기능을 따로 제공해주고 있지 않습니.. 더보기
Unity: 패키지 매니저 상대 경로 사용하기 흔하지는 않지만 여러 프로젝트를 같은 루트에 두고 작업할 때, 패키지로 빼내어 공유하고 싶은 경우가 생깁니다. 절대경로로 로컬 디스크 패키지를 임포트하면 협업간에 디렉터리를 맞춰야하는 등 번거로움이 동반될 수 있습니다. 가급적 그런 케이스를 미연에 방지하기 위해 상대경로로 로컬 패키지를 로드하도록 해 두면 됩니다. ProjectKaya/Assets/Shared/package.json 프로파일이 있어, Kaya-MMORPG 프로젝트에서 임포트해 사용합니다. manifest.json 에서 file:../ 경로는 ProjectRoot/Packages 디렉터리입니다. 더보기
Rider: 네임스페이스 이동 리팩토링하기 Rider는 강력한 리팩토링 기능을 제공합니다. 가장 흔히 사용되는 Rename부터, 리팩토링 과정에서 자주 사용되는 방식을 편하게 작업해줍니다. 네임스페이스를 변경하는 것이 아니라, 다른 네임스페이스로 옮겨야 하는 작업이 발생했고, Rider의 기능으로 손쉽게 해결하였습니다. Refactor this - Move type to another namespace - Specify new namespace 이 클래스를 사용하는 모든 곳에서 상단 네임스페이스가 자동으로 추가됩니다. 이 InputEvents 클래스는 총 31곳에서 사용되고 있는데, 모두 안정적으로 ACF.Client.Event 네임스페이스가 using으로 추가되었습니다. 더보기
Unity: 리그 오브 레전드 스타일 체력바 만들기 오토 배틀러 장르 개인작 개발중에, 특성상 다양한 캐릭터가 한 화면에 등장하고 최대 체력과 현재 체력을 쉽고 빠르게 식별하기 위해 체력바를 가시성 좋게 고쳐야 할 필요성을 느꼈습니다. 기존에 사용하던 캐릭터 체력바는 간단히 비율만 표기했었습니다. 캐릭터의 체력은 500에서 5000을 넘나드는데, 숫자로 표기하거나 추가적인 창을 띄워 보는것은 덕지덕지 불편할 수 있죠. 그렇다면 기존 게임들은 어떻게 해결하고 있을까요? 리그 오브 레전드는 한 칸당 100을 의미합니다. 전략적 팀 전투는 한 칸당 300을 의미하고요. 스타크래프트는 칸으로 나누었지만, 칸당 수치가 고정되어있지는 않습니다. 수치당 칸과 색으로 표기해서 가시성을 높였습니다. 제가 작업하고자 하는 부분은 셰이더로 체력 셀을 나눠주는 부분입니다. 이.. 더보기
dotnet: BannedApiAnalyzer 도입기 도입 계기 작업자가 늘어나면서 코딩 스탠다드 및 네이밍 컨벤션 제어만으로는 사용하지 말아야 할 패턴에 대한 필터링이 어려워지고, 코드 리뷰 시간이 길어지기 시작했다. 일부 API들을 래핑해서 사용하기 시작하면서, 원형을 직접 사용하는 케이스를 Pull Request에서 사람이 직접 확인해야 했고, 이를 개선하기 위해 CI/CD에 분석기를 달아 최종적으로 PR이 머지되기 전 최소 1회 검증이 되도록 자동화했던 이력이 있다. 그런데, 이 케이스는 기대했던 것 보다 작업 과정에서 실수를 바로 알아채기가 힘들었고 코드 리뷰가 완료된 후 이 문제로 인해 코드를 수정해야하는 일이 생기곤 해서 검토했던 것 보다 생산성의 향상을 가져다 주지는 못했다. 솔루션 Console.Log, Reflection 기능 등을 사용했.. 더보기
Unity: 스크립트로 사용중인 그래픽스 아키텍처 파악하기 타겟 기기 뿐만 아니라 에디터에서도 어떤 그래픽스 아키텍처를 사용하는지 알 수 있습니다. SystemInfo.graphicsDeviceType을 호출하면 Direct3D11, Vulkan, OpenGLES3, Metal 등 구분하여 작업할 수 있습니다. https://docs.unity3d.com/ScriptReference/Rendering.GraphicsDeviceType.html Unity - Scripting API: GraphicsDeviceType Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each su.. 더보기
Unity: 로그 파일 기본 경로 빌드된 유니티 엔진의 로그 - C:/Users/사용자이름/AppData/LocalLow/회사명/프로덕트명/ 에디터 로그 - C:/Users/사용자/AppData/Local/Unity/Editor 기본 회사명 : DefaultCompany 더보기
Unity: InputSystem 액션 이름 변경시 유용한 팁 New Input System은 스크립터블 오브젝트를 통해 프로필 형태로 관리된다. 에디터를 열어보면 사용하기 편하게 정리되어 있다. 이 데이터를 바탕으로 자동으로 생성되는 스크립트로 제어와 동작 구현이 가능하다. 모노비헤이비어 클래스에서 인터페이스를 상속받고, 콜백을 설정해준 뒤 인터페이스를 구현해주면 InputSystem이 이벤트를 밀어넣어준다. 그런데, ActionMap이나 Action의 이름을 바꾸어야 할 때 에디터에서 변경 후 코드를 생성하면 스크립트에서는 변경사항이 적용되지 않는다. 모두 찾아 바꾸기 기능을 이용해 수정하는 대안도 있겠지만 네이밍 컨벤션이 비슷한 경우를 완벽하게 필터링 해 수정하기 어렵다. 이 작업 하자고 정규식을 만들어 돌리는 것 역시 시간 낭비일 수 있다. 자동생성된 클래스.. 더보기