Unityでの開発では、transform.position
やcolor
の要素の一部だけを変更したいことがよくありますが、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#を使う選択に変更はなさそうですが・・・?