unity
UniRx에서 First()와 Take(1) 중 어느 것을 써야하는가
2019. 10. 13.개인 프로젝트를 하던 중, 다음과 같은 에러를 만났습니다. InvalidOperationException: sequence is empty System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () (at :0) UniRx.InternalUtil.ExceptionExtensions.Throw (System.Exception exception) (at Assets/Plugins/UniRx/Scripts/InternalUtil/ExceptionExtensions.cs:10) UniRx.Stubs+c.b__3_1 (System.Exception ex) (at Assets/Plugins/UniRx/Scripts/Observer.cs:496) UniRx.Ob..
UniRx에서 여러개의 Observable을 합성하는 방법
2019. 9. 11.비단 UniRx 뿐만 아니라 Rx로 프로그래밍을 하다 보면, 필연적으로 여러 개의 Observable을 동시에 구독하는 것처럼 동작하게 만들어야 할 필요가 있습니다. 예를 들어 비밀번호 확인을 위해 2개의 input필드가 있고, 그 값이 바뀔 때마다 비밀번호가 유효한 규칙으로 작성되었는지 확인하고 싶을 때를 생각해봅시다. 2개의 input 필드를 각각 구독하고 유효한 규칙인지 판단해도 되지만, 2개의 input Observable을 합성하고 그것을 구독하는 방법도 있을 것입니다. 이런 상황처럼 실제로 UniRx를 이용하여 게임 로직을 작성하다 보면, 여러 개의 ReactiveProperty나 Subject를 동시에 구독해서 처리해야 하는 상황들이 많이 나오게 됩니다. 0. Zip 말 그대로 2개의 스트림..
Unity MonoBehaviour에서 유용하게 쓰는 Attribute 정리
2019. 5. 26.*너무 포스팅을 안 해서 느끼는 죄책감에 작성하는 포스팅 최근 팬 게임을 본격적으로 만들기 시작했다. 보너스 받은 걸로 와콤 액정 태블릿도 구입해서 진행 중인데, 아직은 시스템을 제작하고 있는 상황이다... 기반을 닦고 있다 보니 나중에 아트 + 세팅 작업에 필요한 도구들을 만들거나, Component에 박혀있는 변수들을 정리하는 일이 많다. 옛날부터 몇몇 유용한 Attribute들을 이용하여 작업했었는데 오랜만에 기반 작업에 들어간 거라 거진 다 까먹었다. 그래서 리마인드를 위한 정리 포스팅을 진행해본다. (철저하게 개인적으로 사용하는 용도로 정리, 다른 사람은 어떻게 사용하는지 모릅니다 >__ Create에 메뉴 추가 ScriptableObject Asset 생성에 유용 ContextMenu 컴포넌트..
Unity할 때 외워두면 유용한 Mathf 함수들
2018. 6. 17.유니티를 사용하다 보면 숫자를 계산할 때가 많습니다. 이 숫자들을 다룰 때 자주 사용하는 클래스가 Mathf 클래스입니다. 레퍼런스가 잘 되어있다고 하더라도 자주 사용하는 함수들을 외워두면 코드를 작성하는 시간을 크게 줄일 수 있을 것입니다. (무엇보다 구글 켜서 검색하는게 귀찮음...) 그래서 이번에는 알아두면 좋고, 나의 삽질 시간을 줄여줄 수 있는 유용한 Mathf 함수들을 정리해보려고 합니다. 0. 절댓값 Mathf.Abs(float num) Abs은 num에 대한 절댓값을 반환해줍니다. 가끔 데이터의 부호를 때고 계산해야 할 때 편리하게 사용할 수 있습니다. 1. 최대/최솟값 Mathf.Clamp(float num, float min, float max)Mathf.Clamp01(float num..
[번역] 유니티의 예약 폴더들이 가지고 있는 기능들
2018. 3. 18.원문: http://wiki.unity3d.com/index.php/Special_Folder_Names_in_your_Assets_Folder 유니티 에셋 폴더의 예약된 이름들 유니티에서 몇몇 폴더 이름은 특별한 속성을 가지고 있다.숨겨진 폴더들 - 점(.)으로 시작하는 폴더(ex. “.UnitTests/”, “.svn/”)는 유니티에 의해 무시된다. 이 폴더에 들어 있는 어떠한 에셋도 임포트되지 않으면 어떠한 스크립트도 컴파일되지 않는다. 또한 프로젝트 뷰에서도 보이지 않는다. 1. Standard Assets 이 폴더에 있는 스크립트들은 가장 먼저 컴파일된다. 그로므로 스크립트를 Standard Assets 폴더에 두는 것은 C# 스크립트가 .js 스크립트에 접근할 수 있게 하거나 또는 .js 스크..
[번역] 유니티의 Resource Folder에 관하여
2018. 3. 14.The Resource folder이건 Unity5에서 에셋, 리소스 그리고 리소스 관리에 관한 아티클 스리즈의 세 번째 챕터입니다. 이 챕터에서는 리소스 시스템에 관해 설명합니다. 리소스 시스템은 개발자가 "Resource"라는 이름의 하나 이상의 폴더에 Asset을 저장하고 Resource API를 사용하여 런타임에 이러한 Asset에서 개체를 로드하거나 언로드 합니다.. 2.1 Resource System에 대한 모범 사례쓰지마세요! 이렇게 말하는데에는 몇가지 이유가 있습니다. 1. 리소스 폴더를 사용하면 세분화된 메모리 관리가 더욱 어려워집니다.2. 리소스 폴더를 부적절하게 사용하면 애플리케이션 시작 시간과 빌드 길이가 증가합니다. (리소스 폴더의 수가 증가함에 따라 이러한 폴더 내의 Asset ..
Unity VideoPlayer가 Gradle 빌드에서 작동하지 않는 이슈
2018. 2. 12.요즘 어느 정도 볼륨이 있는 게임을 하다 보면 AssetBundle을 다운받는 동안 해당 게임 관련 동영상을 틀어준다거나 튜토리얼, 세계관 같은 것들을 영상으로 틀어주는 경우가 가끔 있다. 그 외에도 학부 프로젝트를 하다보면 유니티 안에서 동영상으로 대략 때우거나 VR 관련 영상을 재생 해야 하는 경우가 생기는데 이때 유니티 내장 Video Player를 사용하곤 한다. 회사에서도 라이브 운영 중 바뀐 시스템에 대해서 간단하게 소개하기 위해 Video Player를 사용하게 되었는데 에디터에서는 잘 작동했으나 디바이스에서는 어째 잘 작동하지 않았다. 에디터에서는 분명히 잘 작동했기 때문에 디바이스의 로그를 찍어보기로 했다. 결과는? AndroidVideoMedia OpenExtractor: file is..
Unity에서 iPhone X를 대응하는 간편한 방법
2018. 1. 5.시작하면서얼마 전까지 iOS에서 가장 핫한 이슈였으며 골칫거리였던 주제는 iPhone X의 탈모 디자인이었다. 각진 사각형이거나 살짝 라운드가 들어간 기존의 안드로이드나 iOS의 화면과는 다르게 화면 상단 부분에 1)M자 탈모처럼 생긴 검은 영역이 생겼기 때문이다. 탈모도 문제였지만 2)물리 홈버튼을 제거하면서 생겨난 홈바가 터치 화면의 일정 영역을 차지했고, 이 영역 또한 고려해 프로그램을 작성해야 했다. 우리는 이 두 개의 요소를 고려해 대응할 필요가 있다. (그래야 피쳐드를 받...읍읍) 이런 대응은 일반적인 iOS 개발은 기존에 있었던 Auto layout 정책을 잘 따랐다면 쉽게 대응할 수 있다고는 한다. 하지만, 게임은 주로 상용화된 게임 엔진을 이용하여 제작하는 경우가 많기 때문에 빌드 사이..
Unity3d 스크린 캡쳐 후 Slack로 보내주는 Plugin 제작기
2017. 12. 24.작업을 하다 보면 Unity에서 세팅한 오브젝트나 씬이 실제 디바이스 위에서는 어떤 느낌으로 보일지 궁금해진다. 만들어진 아트 작업물을 Unity 에디터 위에 그대로 올렸다 하더라도 실제 디바이스 위에 결과물을 올려두면 에디터에서는 느끼지 못했던 느낌들이나 개선점이 있기 마련이다. 그 때문에 나는 작업 중간중간 스크린샷을 통해 그런 느낌들을 하나하나 체크해가면서 작업하고 있다. 실제로 이 작업은 크게 3-step으로 이루어진다. 1) 화면 캡쳐2) 비율에 맞게 캡쳐본 자르기3) 디바이스에 전송해서 느낌보기정도일 것이다. 손이 빠른 아티스트라면 고민 없이 쓱싹 해치우고 올려보겠지만, 나는 편집에 그리 손이 빠른 편이 아니라 작업을 할 때마다 불편함을 느낄 수밖에 없었다. 자세히 보면 작업의 난이도가 단순하..
Unity Android 블루투스 플러그인 제작 & 사용법
2017. 10. 8.지난번에 해커톤 때 사용하다 남은 아두이노를 이용하여 간단하게 DIY 할 수 있는 VR 컨트롤러를 제작해보았고, Unity와 연동해서 사용할 수 있도록 Bluetooth 플러그인을 제작했었다. 그런데 기록용으로 블로그에 글을 남겼었더니 생각보다 많은 사람(?)들이 질문을 남겨주었고, 돌이켜보니 내가 하던 프로젝트에 굉장히 의존적으로 제작되었기 때문에 다른 사람들이 코드를 가져다가 사용하기가 좀 불편했었다. 그래서 이번 길었던 연휴에 틈틈이 짬을 내서 다시 코드를 수정했고 기존에 Java 단에서 처리되었던 패킷 검사 기능들을 Unity C# 스크립트와 에디터 상에서 어느 정도 간단하게 컨트롤 할 수 있는 방식으로 개선되었다. (오래전에 만든 코드이고 그냥 훅~하고 짜서 주석이 없어서 그런지 코드가 엉망진창..
FSM이 우리를 구원하리라
2017. 9. 17.게임 프로그래밍을 공부했다면, 혹은 CS를 2학년까지 수료했거나 이산수학같은 과목을 들었다면 FSM이라는 친구를 한번 쯤은 들어봤을 것이다. FSM은 무신교가 종교를 강요하고 다니는 사람을 비꼬기 위해 만든 날아다니는 스파게티 괴물(Flying Spaghetti Monster)라는 친구도 있지만 CS에서, 수학에서는 유한 상태 기계(Finite State Machine)이라는 친구이다. 앞으로 주변에있는 Sample 크기 이상의 게임을 만들때는 FSM이라는 개념을 알아두면 게임을 구성하고 진행하는데 많은 도움이 될 것이고, 이미 어느정도 만들어져있는 프로젝트에 참여하게된다면 이미 FSM을 적극적으로 활용하고 있는 경우가 많을 것이다. 때문에라도 FSM을 배우고 이것을 게임엔진에서 어떻게 구현할수있는 지를..
Unity를 Visual Studio for Mac 와 함께 사용하기
2017. 7. 28.몇 번 블로그에 언급했듯이 요즘 병역 특례를 구하고 있고, 면접 일정도 몇 개 잡혀서 준비하고 있다. 노트북을 지참하라고 하길래 Unity와 기타 코딩 테스트를 볼 수 있는 환경으로 세팅했다. 원래는 Unity와 Visual studio Code를 연동하고 Unity를 서포트해줄 수 있는 익스텐션들을 설치하여 사용했다. 개인적으로 모노 에디터를 싫어하는 편이고(워낙 안 좋은 기억이 많아서...) 세팅 방법도 포스팅했던 적이 있었던 만큼 편리하게 사용했던 기억이 있다. 최근에는 Windows 위에서 작업하느라 그냥 Visual Studio를 이용했는데 노트북은 MacOS라 다시 세팅했다. 서론이 좀 길었던 것 같지만 요점은 드디어 Visual Studio for Mac이 나왔더라는 점이다. 조금 지난 이야..