목록GameEngine/UnityEngine (14)
방프리
Unity의 UI를 살펴보면 상호작용에 대한 모든 것들이 UnityEvent로 이루어져있는걸 알 수 있다. 이를 통해서 UI의 커스터 마이징이 가능하며 여러 이벤트를 Listener에 등록하여 실행 시킬 수도 있다. 또한 최대 4개의 Generic 인수를 포함하는 UnityEvent를 선언할 수도 있다. public UnityEvent _unityEvent; public UnityEvent _unityEvent1; public UnityEvent _unityEvent2; public UnityEvent _unityEvent3; public UnityEvent _unityEvent4; 인자가 포함된 UnityEvent도 하단과 같이 커스터마이징이 가능하다. [SerializeField] public cla..
올해 들어서 이 Oculus Quest로 프로젝트를 포팅하는데 꽤나 고생을 많이 했다. 덕분에 새해들어서부터 야근에.... 주말출근에.... 정신없는 나날들을 보냈다. 이 과정에서 굉장히 많을 걸 배웠는데 까먹기 전에 기억도 되짚어볼겸 정리해보려고 한다. 1. 텍스쳐 압축은 필수적으로!! - 가장 문제가 되는 부분이였다. 텍스쳐 압축은 그냥 블로그나 타 사이트에서 정리된 것만 보고 오... 이런거구나라고만 느꼈지 PC에서는 그다지 필요성을 못느꼈는데, Oculus Quest가 안드로이드 환경이다보니 확 체감되었었다. 압축하지 않고 프로파일링 검사 시 큰 것은 한 장당 800MB까지 먹는 걸 보고는 무조건 해야겠다라는 생각을 하였다. 2. 빌드 시에는 이제는 x64비트로만 - 구글 플레이스토어, Oculu..

프로젝트를 진행하면서 유저들의 스크린샷 이미지를 S3에 올리는 작업을 진행하게 되었다. 이전에 C++로 AWS SDK 개발을 찾아보다가 포기했는데 다행히 C#에서는 좀 더 쉽게 구현할 수 있었다. NuGet 패키지에서 AWSSDK.S3를 이용하면 굉장히 쉽게 업로드가 가능하다. 코드도 그다지 어렵지 않았다. (하지만 그 과정을 찾는건 어려웠다.... 업로드 안되고 막 ㅜㅜ) 위의 코드에서 accessKey와 accessSecretKey는 무조건 발급 받은 후에 사용할 수 있다. (위의 키가 없다면 연결 자체가 불가능하다.)
회사에서 SteamVR을 대체할 플랫폼으로 Mixed Reality Tool kit(이하 MRTK) 이라는 새로운 플랫폼으로 포팅하는 프로젝트를 진행하였다. 기존의 항상 PC 빌드만 진행해봤던 나에겐 Microsoft Store이라는 새로운? 시장에 앱을 출시해보는 경험이 되었다. 하지만 Microsoft Store에 생각보다 앱이 그렇게 많이 등록되어 있지 않았고, 의외로 정보가 많이 없던 점. 그리고 제작된지 얼마 되지 않아 정보가 그리 있지 않았고 부족한 점이 많았던 MRTK 포팅 과정을 겪으면서 나름의 정리를 해보자 한다. 1. 프로젝트는 플랫폼 별로 나누는 것이 좋다. 양쪽 다 관리하고자 하지 말자 2. 의외의 해결책은 가까이 있을 수 있다. 대충 건너지 말고 하나하나 테스트 해보자 3. 에디터..

회사에서 사이트 내에 있는 HTML 코드로 된 게시글 코드를 받아 파싱해 Unity에서 나오는 것을 요구했다. 문자열로 파싱하는 방법을 처음에 생각해보았으나, 시간 대비 그리고 이것저것 속성 값이 들어간다면 꽤나 까다로운 코딩이 될 것 같았다. 이리저리 찾아본 결과 C# Nuget Package에서 HtmlAgility 라는 dll을 통해 HTML 코드를 파싱하는 방법이 있었다. 이걸 Unity로 어떻게 옮기는냐가 관건이었는데 HtmlAgility가 Mono 컴파일러에서도 동작이 되는지가 문제였다. 일단 테스트로 Plugins 폴더에 넣어봤더니 정상적으로 동작했다. 하지만 Unity Forum에서는 따로 dll로 작성하여 포함하는 것을 적극 권장하였다. 이제 넣었으니 사용해야하는데... 어떻게 사용할까?..

배치 관련 기능을 추가할 때 가장 염두해야할 사항 중 하나가 바로 상태 되돌리기다. 기본적으로 제공해야하는 기능이며, 없으면 유저한테 가장 욕 먹기 쉬운 부분이라고 생각한다. (실제로 이 기능이 없으면 한 번 수정할 때 너무 번거롭기 때문이다.) 이 부분을 제작하고 싶어서 각각의 오브젝트에 List를 넣어 이동 전 상태를 저장하고 오브젝트를 편집할 때마다 상태값인 Transform을 넣어보기로 했다. 키를 누르면 오브젝트가 이동, 키를 누른 기점을 중심으로 List에 현재 위치값을 저장하도록 했다. (누르는 것이 수정을 진행하기 위한 준비동작이라 가정한다.) 하지만 충격적이게도 전부 다 같은 값이 나오게 된다. 회전값과 크기 값은 수정하지 않아서 똑같다 할지라도 위치값은 계속 움직여서 수정이 되어야 하는..

문득 프로젝트를 진행하다가 집 뿐만 아니라 카페나 바깥에서도 프로젝트를 진행하고 싶다는 생각이 들었다. (최근 집에서 잘 집중도 안되었고) 그래서 github 저장소에 올려놓고 작업할 때마다 불러올 생각에 관련 정보를 찾았고, 중간중간에 발생된 에러에 대해서도 한 번 정리해보기로 했다. 일단은 Git을 사용하기 전 유의사항은 Github 저장소 하나당 용량은 1GB LFS 사용시 1GB 이상 사용 가능 저장소 개수는 무제한으로 생성 가능 private 저장소는 3명까지만 협업 가능 (public은 무제한) 1. GitHub 가입 https://github.com/ 접속 후 계정을 생성한다. 2. Git 설치 https://git-scm.com/downloads 에 접속한 후 자신의 운영체제에 맞게 프로그..

이왕 캐릭터AI를 만든겸 플레이어도 똑같이 StateMachine을 사용하도록 수정해보았다. 대신 Controller와 플레이어 캐릭터의 분리가 필요했다. 일반 캐릭터와 별개로 움직여야되기 때문에 State 클래스를 따로 제작했다. 채집 모드가 아닌 상태에서 현재 위치와 클릭된 위치의 길이가 차이가 났을 때 바로 Run상태로 바꾸게 했다. 매 프레임마다 현재 위치와 클릭된 위치와 계속 값을 계산하지만 연산량이 크지 않기 때문에 놔두기로 했다. (오히려 적은 연산량으로 잘 분리시켰다고 생각한다.) 이후 PlayerCharacter.cs에는 Character.cs와 내용을 비슷하게 구현했다. 에러없이 잘 돌아갔다 ㅎㅎ 움직이는 상태에 들어가는 Enter()에 스프라이트를 회전하는 걸 넣었더니 연속으로 클릭했..