[Unity]3.5と4以降の互換性を取る書き方

スクリプトを書く上で、3.5と4からで一番大きな違いは、active関連があります。
Asset Storeなどからソースを落としてくると良く見かけるのが↓

#if UNITY_4_0
// Unity4.0のコード
gameObject.SetActive(false);//とか
#else
// Unity4.0以外のコード
gameObject.SetActiveRecursively(false);//とか
#endif

これでも、確かにUnity4.0.xまでは問題なく動作していましたが、
今現在の最新版は4.1.2ですし、4.2の話もUnity公式開発者ブログで出ていますので、更新頻度の激しいUnityではあまり好ましくない書き方だと思います。

警告が出るだけでなく、最悪想定外の動作を起こしかねないので、以下のように書いたほうがいいでしょう。

#if UNITY_3_5
// 3.5.xのコード
gameObject.SetActiveRecursively(false);//とか
#else
// それ以外(4.x以降想定)のコード
gameObject.SetActive(false);//とか
#endif

この書き方によって、最新版がイレギュラーではなく、旧版をイレギュラーとして扱うようになり、これ以降Unityが小アップデートしても、再度互換性崩すようなアップデートが入らない限り問題なくなりますよね。
この上で、”サポートしているのはUnity3.5以降です”とreadmeなりに書いておけばOKです。

まあ、結局Unity様が下位互換考えずに変更してしまえば、全てのアセットも更新せざるを得ないので、可能な限りこういった変更は少なくして欲しいものですね。

http://forum.unity3d.com/threads/150803-Major-version-conditional-compilation
ちなみに、ここにあるように自前でdefineしまくるというのもいいかもですね。

※NGUIどうやってるんだ?と覗いてみたら、同じくUNITY_3_5で区切ってました。さすがです!

Unityのアセット販売中!

ステートマシンの状態遷移やパラメータはエディタで編集でき、
ゲームロジックに依存するステートの挙動はスクリプトで記述可能なエディタ拡張。

詳細はこちら

RPGツクールVXやWOLF RPGエディターのオートタイルに準拠したエディタ拡張。

詳細はこちら

オススメ!