Programming Serendipity

プログラミングを中心に種々雑多に書き留めます

なぜtransform.position.xやcolor.aが直接変更できないのか

Unityでの開発では、transform.positioncolorの要素の一部だけを変更したいことがよくありますが、C#ではtransform.position.x += 10;color.a = 1;などとするとエラーになってしまいます。

JavascriptではできるのになんでC#ではできないのか、とずっと疑問に思っていましたが、Unityのフォーラムの投稿で理由が説明されていました。

Enabling emission | Unity Community

↑はParticleSystem内の構造体へのアクセスでもpositionやcolorと同様の難点があったことに対し、UnityTechnologiesの方が、「GC(ガベージコレクション・時間のかかる自動的なメモリ開放)を発生させないように試行錯誤した結果の設計」と説明されています。なるほど、そういうことだったのですね。

Unity側としてもC#でも本当はtransform.position += 10;のように書けるようにしたいとのことで、Unity6に期待したいところです(ついでにPersonalでも黒いスキン使わせてください)。

しかしそうなると、Javascriptではtransform.posoition.x += 10;と書いたらGCが発生するのか、というところが気になりますね。発生しないのであれば、この点に関してはJavascriptのほうが優れていることになります。まあこのくらいの利点の差であればC#を使う選択に変更はなさそうですが・・・?