Unity 5에서의 API 변경과 자동 스크립트 업데이팅에 관한 내용을 간단히 정리해보았습니다.

포스팅 내용은 아래 링크들을 참조하였습니다.

http://blogs.unity3d.com/2014/06/23/unity5-api-changes-automatic-script-updating/



유니티 엔진의 기능이 많아지고, 점점 개발 엔지니어들이 동시에 빌드하게 되는 상황이 잦아지면서 엔진을 각각의 모듈로 분할하는 '모듈화(modularisation)'의 필요성이 증대하였습니다. 
 

 모듈화(modularisation)의 효과는:


 1) 각 모듈들에 대해서 서로 다른 시간대의 각 모듈의 배포가 용이해집니다. 

 2) 서로 다른 팀들 간의 각자의 컴포넌트들에 대해 작업을 하는 것이 더욱 수월해집니다. 

 3) 무엇보다 가장 중요한 효과는 바로 유니티 유저 측면에서 더 작은 사이즈로 게임을 쉬핑할 수 있게 된다는 것입니다. 현재 개발하고 있는 게임에서 '필요가 없는' 모듈은 그냥 빼버리면 되는 것입니다. (예를 들어 파티클 시스템이나 2D렌더링이 사용되지 않는 게임은 이 모듈을 포함하지 않고 빌드가 되는 것이죠.)

 유니티 개발팀에서는 이러한 여러가지 모듈화의 장점을 얻기 위해서 이미 엔진 모듈화를 위한 작업을 돌입한 상태이며, 이 작업은 꽤 오랜 시간이 걸릴 듯 합니다. 

 

 모듈화 작업의 대부분은 유저에게 드러나는 부분의 작업들은 아니기 때문에 진행하는 데에 특별한 문제는 없었습니다. 그러나 개발팀은 작업 도중에 유저들에게 영향이 있을 수 있는 몇몇 '의존성' 이슈와 부딪히는 상황이 겪게 되었습니다.


예전에 개발팀에서는 일반적으로 많이 사용하는 컴포넌트에 대해서는 빠른 컴포넌트 속성 게터(getter)들을 추가했었습니다.


void Start()

{

//"rigidBody" calls: UnityEngine.Rigidbody UnityEngine.Component.get_rigidBody()


rigidBody.velocity = Vector3.up;

}


하지만 시간이 흐른 뒤 되짚어 볼 때, 어떤 컴포넌트를 위해서는 이런 퀵 액세서가 있고,또 어떤 것들은 없어야 하는지 그 이유도 명확하지도 않았고, 이런 스타일이 모듈화에는 당연히 좋지 않을 수 밖에 없었습니다. 모듈화를 위해서는 모든 의존성이 한 방향으로만 이루어지도록 하는 것이 적절하기 때문입니다. 즉, MonoBehaviour를 '코어' 모듈에 포함을 시키게 되면서, 타 모듈에 있어야 할 컴포넌트의 속성 게터(getter)에 대한 구현을 담고 있지 않도록 해야 합니다. 이에 따라 Unity 5에서는 .transform을 제외한 컴포넌트 속성 게터를 모두 없애기로 하였습니다. 이제 .ridgidBody 같은 형식의 액세서(게터)들은 모두 없어집니다.


 사실 '더욱 좋게 만드는 것'과 '이미 작업된 프로젝트를 깨지 않는 것'의 밸런스를 찾는 것은 개발에 있어서 가장 어려운 일 중 하나입니다. 이번 케이스의 경우, 장기적인 관점으로 볼 때 모듈화는 다른 어떤 것들보다 중대한 과제라고 판단하였고 그것을 위한 방향으로 갈 수 밖에 없었던 것이죠.

 결국 이러한 변화로 인해, 유니티 유저들의 입장에서는 스크립트를 수정해야 하는 고통을 겪을 수 밖에 없게 되었습니다. 그나마 이 이슈가 가져온 불편 해소하기 위해 자동 스크립트 업데이팅(Automatic Script Updating)을 기능을 제공하기로 하였습니다. Unity 5에서는 만약 유저가 작성한 스크립트에서 예전 API를 사용하면, 이것을 감지하여 (유저의 의사를 물은 후) 새로운 API를 사용하는 코드로 재작성 해주는 기능이 들어가게 됩니다.

 

아래와 같이 스크립트를 작성하였다면:



다음과 같이 컨버팅이 될 것입니다:


이러한 자동 스크립트 업데이터는 C#, UnityScript, Boo, prebuilt .dll 어셈블리에서 동작합니다.

이것을 언젠가 에셋스토어 벤더들에게 오픈할 계획도 있습니다. 이렇게 함으로써, API 개선에 대한 유연성이 더욱 증가시킬 수 있습니다. 또한 유니티 유저들이 겪는 불편은 최소화하면서 이와 동시에 오랜동안 묵은 오류들을 수정할 수 있는 효과도 기대해 볼 수 있을 것입니다.



Posted by 흑 기사
,