Unity5에 또 작은 기능이 추가되었다. 바로 RuntimeInitializeOnLoadMethod 이라는 attribute 이다.


이것은 unity game이 실행 될때, 무조건 실행되는 함수이다.

Editor에서 InitializeOnLoadMethod와 동일한 기능을 하는 기능이다.

다른 점은 RuntimeInitializeOnLoadMethod은 게임 실행시에 처음 실행되는 기능이라는 것이다.


Unity4에서도 계속 이런 기능을 원했건만, 드디어 추가 되었다.

static constructor는 누군가가 이 class를 접근해야만 실행되는 거라서, 실행이 불확실했는데, 이제는 단순히 이 attribute를 사용만 하면 된다.

주의할 점은 RuntimeInitializeOnLoadMethod가 항상 제대로 실행되지는 않는다. Editor에서는 잘 실행되면 메서드가, 모바일 빌드해서 돌리면, 실행되지 않는 경우가 발생한다.

현재까지 경험한 바로는 DLL로 미리 빌드해 넣은 Plugin에 있는 RuntimeInitializeOnLoadMethod는 Editor에서는 실행되고, mobile 빌드에서는 실행되지 않는다.

Posted by 바람인생
,

Unity4에서 부터 계속 editor상에서 무슨 변화가 있으면, noti되는 기능을 찾았지만, 찾지 못했다.

Unity5에서 이게 드디어 지원된다.

아래 delegation 이다.


Undo.postprocessModifications


단 Undo에 등록되는 변화에만 처리되는 것으로 보인다.

참고로 Unity5에서는 매 frame마다 SceneView가 Render된다.

Unity4에서는 변화가 있을 때만 SceneView가 Render되었는데, 이상한 변화이다.

이로 인해서 앞서 말한 기능을 찾아서 사용하게 되었다.

Posted by 바람인생
,

Shader가 Asset Bundle에 포함되면, 이 Shader는 제대로 표현될까?

Shader는 평상시에 text 형태의 소스코드로 존재해서, windows editor에서는 d3d로 동작하고, 모바일 기기에서는 open gl es나 metal 로 동작된다.

즉 소스코드로 존재할 때는 unity가 알아서 현재 동작되는 플랫폼에 맞는 binary로 빌드해서 처리해 준다.


문제는 shader 를 AssetBundle안에 묶을 때 발생한다.

Shader가 Asset Bundle에 포함되면, 소스코드 형태로 들어가지 않고, 타겟 플랫폼으로 빌드된 형태로 포함되게 된다.

따라서 이 Asset Bundle을 타겟 플랫폼에서 사용하면 잘 동작하지만, 다른 플랫폼에서 사용하면 Shader.isSupported가 false로 나오면서 핑크 또는 검정색으로 뜨게 된다.


이게 당연한 얘기처럼 들릴 수도 있겠지만, Asset Bundle을 개발을 위해서 editor에서 돌릴 때 문제가 된다.

editor에서 android 타겟으로 빌드한 asset bundle을 열어서 사용하게 되면, 타겟 플랫폼은 android이고, 현재 플랫폼은 windows이므로 shader가 지원되지 않는다.

즉 분홍색 또는 검정색으로 나오게 된다.


이런 현상을 처음 겪게 되면, 유니티 버그로 인식하게 되고...... 절망하게 된다.

이를 피할 수 있는 방법은 editor에서만 shader를 Shader.Find()로 한 번 더 찾아서, 연결시켜주면 된다.

오직 editor에서만 이런 처리를 해주면 된다. 타겟 플랫폼에서는 원래 잘 되기 때문이다.


좀 더 편리한 해결 방법이 있을까?

http://www.mingruijiang.com/Shaders-from-asset-bundles-appear-pink-in-editor

Posted by 바람인생
,