2014년 7월 3일 목요일

visual studio express 라이센스

외국에서는 예전부터 MS 오피스, MS VS 등의 라이센스 비용 절감을 위해 open office, visual studio express 등을 전사적으로 사용하는 곳들이 많았다.

국내 회사로 이직 후 이런 이야기를 관련된 매니저 이상급들에게 말을 해보았으나, 개인 라이센스와 기업 라이센스는 다를거라는 둥의 일반적인 말, 혹은 저렴하게 볼륨 라이센스 계약을 맺었으니 그런 건 걱정말고 개발이나 잘 하라는 따뜻한 격려의 말로 넘어가곤 했다. 뭐.. 니네 돈 나가지 내 돈 나가는 건 아니니까 상관은 없다만...


visual studio express 소개 페이지를 보면,

Visual Studio Express products are available at no charge and may be used for commercial, production usage subject to the license terms provided with each product. For example, you can use Express for Windows to create apps that you can then submit for sale in the Windows Store.


사용가능하답니다.


그래도 불안하다는 사람들이 있어서 MS에 직접 문의해보았다.



문제는 없답니다.




2014년 6월 19일 목요일

unity3d, singleton & switching scenes

singleton 디자인 패턴은 언어와 플랫폼을 막론하고 널리 쓰이지만 실제 그 개념을 모르고 '그냥' 쓰는 경우가 많다. 개발자 면접을 보면 내가 가장 많이 묻는 질문은 static class와 singleton class의 차이를 아느냐 인데, 대부분은 말을 못한다. 심지어 static class가 곧 singleton 인 것으로 아는 사람도 있다.

어쨌거나 unity3d에서 Application.LoadLevel()을 통해 scene간 변환을 하려 하면 기존 scene에서 올린 것들은 모두 내려가는 것 때문에 곤란해 하는 사람을 본 적이 있다. 이 때가 바로 singleton 클래스의 특성 - 어플리케이션의 라이프타임동안 반드시 n개 (특별한 경우가 아니면 하나..) 존재함이 보장되는, 전역에서 접근 가능한 클래스 - 이 반짝반짝 빛나는 케이스이다.

unity3d에서 c#으로 singleton 클래스를 구현하는 것은 unity3d wiki 페이지에 잘 안내되어 있다. http://wiki.unity3d.com/index.php/Singleton

위 링크에 소개된 singleton 클래스는 빈 gameObject에 타입의 singleton 클래스를 씌워 hierarchy에 띄우고, DontDestroyOnLoad 메소드를 통해 scene이 바뀌어도 해당 gameObject가 내려가지 않도록 만든 것이다.


주의할 것은, 위와 같이 생성된 singleton 클래스를 다른 gameObject에 component로 붙인다거나, 다른 gameObject의 child로 위치를 옮기게 한다면 (transform.parent = something.transform) DontDestoryOnLoad 메소드의 효력이 없어진다.


만약, singleton 클래스들의 수가 적지 않아, hierarchy의 root에 너무 많은 element들이 보여지는 것이 싫다면, 빈 gameObject를 하나 만들어 (singletonClasses 등의 이름을 붙여서) singleton 클래스를 그 아래 넣고, 그 클래스를 DontDestoryOnLoad에 태운다.


이러한 것을 이용하면, 모든 scene에서 공통으로 사용되는 singleton 클래스와 scene단위로 새롭게 생성되는 제한적인 singleton 클래스를 적절한 케이스에 맞게 사용할 수도 있다.

2014년 6월 11일 수요일

Unity3d: Monodevelop에서 디버깅시, List의 엘러먼트들을 참조할 수 없을 때



VS에서 바로 디버깅만 되었어도 Monodevelop을 쓸 일은 없었을 텐데,
많은 unity3d 개발자들도 그러하겠지

아무튼 Monodevelop으로 디버깅하다가 List 형태의 변수들을 찍으면 

Unknown type 'System.Collections.Generic.CollectionDebuggerView`1, mscorlib.dll'

이런 메세지와 함께 엘러먼트들을 볼 수 없는 경우가 있다. (아니, 안 그런 경우도 있던가? 가물가물... 나만 그런가??)

이 때

1. unityVS를 산다. 직장인이면 사달라고 품의서를 올린다. VS에서 돌린다. 끝.

2. .ToArray() 메소드와 함꼐 watch 창에 붙인다.