본문 바로가기

전체 글

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를 기반으로 한 네트워크 플레이를 기반으로 개발되었습니다. 게임은 데디케이트 서버에서 진행되며, 각 게임 진행상황과 데이터 변동을 패킷으로 묶어 처리합니다. 서버에서 클라이언트로 보내지는 모든 패킷은 헤더에 포함된 패킷 정보로 타입을 식별하고 데이터 영역을 클라.. 더보기
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: 리그 오브 레전드 스타일 체력바 만들기 오토 배틀러 장르 개인작 개발중에, 특성상 다양한 캐릭터가 한 화면에 등장하고 최대 체력과 현재 체력을 쉽고 빠르게 식별하기 위해 체력바를 가시성 좋게 고쳐야 할 필요성을 느꼈습니다. 기존에 사용하던 캐릭터 체력바는 간단히 비율만 표기했었습니다. 캐릭터의 체력은 500에서 5000을 넘나드는데, 숫자로 표기하거나 추가적인 창을 띄워 보는것은 덕지덕지 불편할 수 있죠. 그렇다면 기존 게임들은 어떻게 해결하고 있을까요? 리그 오브 레전드는 한 칸당 100을 의미합니다. 전략적 팀 전투는 한 칸당 300을 의미하고요. 스타크래프트는 칸으로 나누었지만, 칸당 수치가 고정되어있지는 않습니다. 수치당 칸과 색으로 표기해서 가시성을 높였습니다. 제가 작업하고자 하는 부분은 셰이더로 체력 셀을 나눠주는 부분입니다. 이.. 더보기
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: 2022.1 IL2CPP 제네릭 공유 개선점이 가지는 의미 Feature preview: IL2CPP Full Generic Sharing in Unity 2022.1 beta | Unity Blog Feature preview: IL2CPP Full Generic Sharing in Unity 2022.1 beta | Unity Blog This code demonstrates the expressiveness of generic virtual methods. In other words, we can send data of any type (the “message”) from any class that implements the IManager interface to any class that implements the IReceiver interface. W.. 더보기