できることはやった
#成果物
https://github.com/pandaman64/unity4d
#やったこと
##.NET用dmd
dmdの.NET用バックエンドをD Compiler for .NETから引っ張ってきました.
( ^ω^)・・・
( ^ω^)し,死んでる・・・
気を取り直してSource Codeの所からDownloadをクリック.ワクワクを抑えながらソリューションを開いて高らかにビルドをターン!!
(,,゚Д゚)
ソースコードを眺めてみます.
あー.
????
dmdのソースに含まれていたstdint.hが古かったみたいです.最新のdmdからstdint.hを拾ってきたらエラーが消えました!
他にも細々としたコンパイルエラーを消しました.エラーの原因はおおよそVC++の規格準拠度が上がった(!)せいのようです.古いVC++でコンパイルできるように加えたハックが逆にエラーを引き起こしていたみたいでした.悲しいなあ・・・
##Hello, World!
D.NETは.NETの中間言語であるCIL(Common Intermediate Language)を吐いて,そこからMS謹製のアセンブラ(ilasm.exe)でアセンブルしているので,デベロッパーコマンドプロンプト上でコンパイラを実行する必要があります.
やってみました.
こんなのを書いてコンパイルしたら,
こんなのがでてきて,
やったあ!変数も使ってみましょう,
どうかな?
(´・_・`) ・・・・・・訳が分からないよ・・・
ローカル変数の宣言部分(.locals initから)のところに余計なカンマがあるのが原因だったのでそれを取り除くスクリプトをD言語で書きました.昔のアセンブラは構わず通してたんだろうか・・・
##Unity
D.NETに付属しているライブラリファイルではConsole.WriteLineしかできないので面白くありません.せっかくの.NETなのですから,Unityでも使えるようにしてみましょう.
.NETのアセンブリ(dll)から宣言を抜き出すプログラムを書いてmscorlib.dllとUnityEngine.dllに対して走らせます.
するとD言語でimportする用の.dファイルの出来上がり!
やったー.自作のMonoBehaviourを書きます.
コンパイルしたdllをUnityのエディタに放り込んで,
スクリプトをアタッチできたぞー!!!
後はテキトーにゲームを一本書くだけだなと,このとき(24日夜)は思ってたのですが.
##MissingMethodExceptionの罠
dotPeekで見る限り.dファイルは正常に生成されているし,ILにも特別不審な点は見当たらないのですが,なぜかMissingMethodExceptionが出てうまく動きませんでした.