unity3dにおけるus c# boo比較
DESCRIPTION
Unity-Fukuoka勉強会のLT資料だったものです。後日これの完全版を上げます。TRANSCRIPT
US,C#,Boo比較九州大学芸術工学部3年 花田 恒一
13年4月3日水曜日
じこしょうかい!
Nobukazu Hanada
@nobkz
好きな言語 LISP
Unity3dはとりあえず1年ぐらい
13年4月3日水曜日
ちょっと、謝っておきたい事がありまして...
13年4月3日水曜日
このスライドを作成した時の事
13年4月3日水曜日
調子に乗って、どんどんスライドを追加していた結果
13年4月3日水曜日
200枚超えちゃいました!
13年4月3日水曜日
どう考えてもLTの枚数ではないですね...
13年4月3日水曜日
なので、すごく内容を圧縮&削ってます
13年4月3日水曜日
えっと、ところどころ飛躍してたりするかもしれないのでご容赦ください
(なんとか、60枚程度に圧縮しました)
13年4月3日水曜日
Unityのサポート言語につい
13年4月3日水曜日
サポートされている言語
JavaScript ( UnityScript )
C#
Boo
13年4月3日水曜日
先に結論から書くと...UnityScript ( JavaScript )
ゲームオブジェクトのふるまいが書きやすい
C#
主にゲームロジックやらライブラリやら(ry
Boo
Unity3d最強の言語
13年4月3日水曜日
比較するまえに
13年4月3日水曜日
Unityアーキテクチャ
Unity Engine Unity Editor Unity3d
共通言語基盤(CLI).NET Framework / Mono
13年4月3日水曜日
CLIとは
.Net Frameworkの基幹を構成する実行コードや実行環境などについてMSが策定した仕様
CLI、C#言語共に仕様は公開されている。
Microsoft .NET Framework
MSの商用実装
Mono
オープンソースの実装
13年4月3日水曜日
Monoとは
.NET Framework互換環境
CLIのオープンソースの実装
Javaと同じ中間コード方式
(JVM => CLR, バイトコード => CIL )
13年4月3日水曜日
中間コードが生成できれば、どんな言語だって使える
13年4月3日水曜日
中間コード化されるので言語による速度の差はない
どの言語も適度に最適化すればおk
13年4月3日水曜日
US,C#,Boo各言語紹介
13年4月3日水曜日
とりあえず、JS(US)から
13年4月3日水曜日
JavaScriptはみんな知ってるよね?けど、Unityの「JS」はJSじゃないんだ。
13年4月3日水曜日
UnityScriptと呼びなさい!
13年4月3日水曜日
と、いうわけでUSとJSの違いをまとめてみたお!(ちょっと、過去のVersionのUnity3dで検証したから
ところどころ変わってるかも)
13年4月3日水曜日
UnityScript! JSって呼ぶな!
型指定できる
標準グローバルオブジェクトが存在しない
argumentオブジェクトが存在しない
prototypeが存在しない
classがあるよ
13年4月3日水曜日
US!JSって呼ぶな part2
ダッグタイピングできない
interfaceがある
なのに、抽象クラスが書けない
メソッド名がpascal記法
関数のオーバーロードが出来る
最新版では書けるみたい
13年4月3日水曜日
US!JSって呼ぶな part3
動的なメンバの追加はできない
一度に複数の変数を宣言できない
generics method,class が中途半端に使える
13年4月3日水曜日
つまりは、USはJS風のC#!
13年4月3日水曜日
そもそもUnityScriptは、CLI上で走る言語BooをDSLホスト言語として作ったJavaScript風の言語。
要するにBooの劣化版
13年4月3日水曜日
C#について
13年4月3日水曜日
ご存知だと思うからパス!
13年4月3日水曜日
あ、どの言語にも言えることだけどGCの動きだけは注意してね
知らない間にメモリリークしてるかもよ
13年4月3日水曜日
Boo言語について
13年4月3日水曜日
Boo言語とは?Pythonライクな、CLI上で走る言語
静的片付け
C#よりも短く書ける
強力なメタプロ
RodrigoB.DeOliveira 設計、開発
13年4月3日水曜日
Boo言語とは( Pythonぽい)
インデントが文法
リスト内包表記ができる
ダックタイピングができる
匿名関数が書きやすい気がする。
13年4月3日水曜日
BooについてC#より
型定義
ちゃんとしたinterface
プロパティメソッド
ちゃんとしたgenerics
13年4月3日水曜日
Booのソースコード
13年4月3日水曜日
サンプルとしてTetromino(テトリスミノ)クラスの実装
13年4月3日水曜日
これをコンパイルして、DLLファイルをC#に逆アセンブリしてコード整形
してみた。
13年4月3日水曜日
なんかごちゃごちゃ
13年4月3日水曜日
Pythonのインデント文法の良さが分かるよねー
13年4月3日水曜日
Unity3dのスクリプティングにおける、各言語の差異について
13年4月3日水曜日
position.x = 1のについて
13年4月3日水曜日
C#で書いたやつ
13年4月3日水曜日
安定のエラー
13年4月3日水曜日
JS Boo
これらはOK。エラーは出ない。
13年4月3日水曜日
なんでエラーなるのか?
Vector3dは参照型のクラスない
Vector3dは値型の構造体
だからエラーがでる。
13年4月3日水曜日
じゃあ、なんでBooやUSでエラーが出ないのよさ?
13年4月3日水曜日
なんか、コンパイル時にUnity3dがなんとかしてくれるらしいよ。
13年4月3日水曜日
逆アセンブルすると分かるよ
13年4月3日水曜日
つまり、ちゃんとコンパイル時にちゃんと「構造体をコピーしたものを修正して、
再代入」するように変換してくれてるんだ
13年4月3日水曜日
USの場合は、ホスト言語がBooなので、同様の処理が走るよ。
13年4月3日水曜日
Booが神なことについて
13年4月3日水曜日
USまとめ
USは結局のところJavascript風のBoo
US独自言語なので、Unityに依存しないライブラリを作れない。
再利用がなかなかしずらい。
13年4月3日水曜日
C#まとめ
一応なんでもできる。
position.xの書きづらさ
Booの言語機能と比べると、若干劣る。(リスト内包表記など)
13年4月3日水曜日
Booまとめ
神言語( Unity3dでは最も良い言語だと思う)
悲しいかなBooを使う人がなかなかいない
ドキュメントが少ない
MonoDevelop-UnityのBooで、IDEがちょっとオカシイ。(補完とか、テンプレートを開くところ)
13年4月3日水曜日
ちょっと補足スクリプトのライブラリ生成場所
US
Library/ScriptAssemblies/Assembly-UnityScript.dll
C#
Library/ScriptAssemblies/Assembly-CSharp.dll
Boo
Library/ScriptAssemblies/Assembly-Boo.dll
13年4月3日水曜日
補足2
ちなみに、外部ライブラリはAssetとして登録
そうすると自動的にプロジェクトの参照に追加される
13年4月3日水曜日
さらに補足:スクリプトの戦略として
13年4月3日水曜日
自分の場合できるだけ、Unity3dに依存しない、ポータブルな外部ライブラリを作ることを心がけてます。
というか、プログラミング全般として、ロジックの分離って大事だよね。
外部ライブラリはF#か、Booで僕は書くようにしています(どーでもいい)
13年4月3日水曜日
依存関係に注意
Unityへの依存
.Netへの依存(バージョンとか)
プラットフォームの依存
13年4月3日水曜日
更に補足(最後です)
13年4月3日水曜日
異なる言語間アクセス
基本的に、US、C#、Booは同じアセンブリにコンパイルされないので、単純にアクセスできない。
特別なフォルダとしてStandard Assets、Pro Standard Assets、Pluginsフォルダのスクリプトが一番最初にコンパイルされる
13年4月3日水曜日
異種言語間アクセスその2
よって異なる言語のコードを参照したい場合Standard Assets、Pro Standard Assets、Pluginsフォルダに置いてCILにコンパイルさせて、参照するようにする。
例えば、C# -> USにアクセスしたい場合、USをこれらのフォルダに格納する。(実演。)
13年4月3日水曜日
ご清聴ありがとうございました。
13年4月3日水曜日