본문 바로가기

Unity

Unity: 호출하는 스코프에 따라 달라지는 값, Time.deltaTime 유니티 스크립팅은 게임오브젝트에 컴포넌트를 붙이고, 유니티 코어로부터 들어오는 이벤트를 기반으로 동작을 처리하며 행동을 디자인 합니다. 가장 많이 사용되는 예시로는 Awake, Start, Update, FixedUpdate 등이 있는데요. MonoBehaviour 클래스를 상속받고 이 함수를 구현하면, 유니티 코어가 인식하여 해당 함수를 실행시켜 줍니다. 본 아티클에서는 이 함수들 중, Update와 FixedUpdate에 대해서 얘기해 볼까 합니다. Update Update 함수는 매 프레임 호출됩니다. 게임의 타겟프레임이 60fps라면, 1초에 60번 호출될 것이라고 기대할 수 있습니다. 물론 이 Update 루프에서의 작업이 1초 / 60 의 수치인 0.0166667 초 보다 오래 걸렸다면 1초에.. 더보기
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 디렉터리입니다. 더보기
Unity: 플러그인에 사용하기엔 계륵같은 존재, UI Toolkit 작년 3,4분기에 열심히 개발하던 AssetLens라는 이름의 종속성 탐지 기능이 중점인 플러그인이 있습니다. 지금도 작게나마 관리중이지만, 플러그인의 특성상 다양한 버전의 유니티 에디터를 지원해야하는 어려움에 부딪혀 점차 개발속도가 느려지다 끝내 소소한 버그픽스만 진행하고 있습니다. 가장 큰 문제는 한 번만 작업하고도 여러 버전의 에디터를 동시에 지원하고 싶은 욕심이 불러온 복잡한 개발 파이프라인입니다. GitHub - seonghwan-dev/AssetLens: Asset Lens : Unity asset reference management utility working in background. 에디터 백그 Asset Lens : Unity asset reference management utili.. 더보기
Unity: 어드레서블, 아마존 웹 서비스 AWS S3 403 Access Denied 문제 해결 퍼블릭 액세스도 허용하고 별 다른 이슈가 없는 것 같았는데, 버킷의 정책을 설정해주지 않아서 생긴 문제였다. { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::내버킷이름/*" } ] } 으로 정책을 지정해주니 publicly accessible 라벨이 붙으면서 어드레서블에서 접근할 수 있게 된다. 더보기
Unity: 플랫폼 별 미리 지정된 Path 유니티 에디터 Application.dataPath : 프로젝트경로/Assets Application.persistentDataPath : Appdata/LocalLow/${CompanyName}/${ProductName} Application.streamingAssetsPath : 프로젝트경로/StreamingAssets 윈도우 스탠드어론 Application.dataPath : .exe 경로/exe_Data Application.persistentDataPath : Appdata/LocalLow/${CompanyName}/${ProductName} Application.streamingAssetsPath : .exe 경로/exe_Data/StreamingAssets 더보기
Rider: 네임스페이스 이동 리팩토링하기 Rider는 강력한 리팩토링 기능을 제공합니다. 가장 흔히 사용되는 Rename부터, 리팩토링 과정에서 자주 사용되는 방식을 편하게 작업해줍니다. 네임스페이스를 변경하는 것이 아니라, 다른 네임스페이스로 옮겨야 하는 작업이 발생했고, Rider의 기능으로 손쉽게 해결하였습니다. Refactor this - Move type to another namespace - Specify new namespace 이 클래스를 사용하는 모든 곳에서 상단 네임스페이스가 자동으로 추가됩니다. 이 InputEvents 클래스는 총 31곳에서 사용되고 있는데, 모두 안정적으로 ACF.Client.Event 네임스페이스가 using으로 추가되었습니다. 더보기
ABS: 패킷 타입 자동 생성 1. 본 방법론은 다른 자료나, 책, 강의를 가져다 디자인 것이 아니며, LiteNetLib의 기본 라이브러리 예제와 MessagePack 예제를 참고하여 제작중인 게임의 특징에 따라 여러차례 리팩토링을 거쳐 정착한 방식입니다. 특출나거나, 독자적인 방식이 아니며 상황에 다소 의존적일 수 있어 모든 상황에 알맞는 예제는 아님을 밝힙니다. 2. 강의 글이 아닌 기록 남김이라 코드는 이해를 돕기 위한 이미지만 첨부합니다. 오토 배틀 시뮬레이터는 UDP를 기반으로 한 네트워크 플레이를 기반으로 개발되었습니다. 게임은 데디케이트 서버에서 진행되며, 각 게임 진행상황과 데이터 변동을 패킷으로 묶어 처리합니다. 서버에서 클라이언트로 보내지는 모든 패킷은 헤더에 포함된 패킷 정보로 타입을 식별하고 데이터 영역을 클라.. 더보기