Help us understand the problem. What is going on with this article?

unity4d

More than 3 years have passed since last update.

できることはやった

成果物

https://github.com/pandaman64/unity4d

やったこと

.NET用dmd

dmdの.NET用バックエンドをD Compiler for .NETから引っ張ってきました.
DNEThistory.png
( ^ω^)・・・
deadDNET.png
( ^ω^)し,死んでる・・・

気を取り直してSource Codeの所からDownloadをクリック.ワクワクを抑えながらソリューションを開いて高らかにビルドをターン!!
errors.png
(,,゚Д゚)
ソースコードを眺めてみます.
alignof.png
あー.
stdint.png
????
dmdのソースに含まれていたstdint.hが古かったみたいです.最新のdmdからstdint.hを拾ってきたらエラーが消えました!

他にも細々としたコンパイルエラーを消しました.エラーの原因はおおよそVC++の規格準拠度が上がった(!)せいのようです.古いVC++でコンパイルできるように加えたハックが逆にエラーを引き起こしていたみたいでした.悲しいなあ・・・

Hello, World!

D.NETは.NETの中間言語であるCIL(Common Intermediate Language)を吐いて,そこからMS謹製のアセンブラ(ilasm.exe)でアセンブルしているので,デベロッパーコマンドプロンプト上でコンパイラを実行する必要があります.

やってみました.
hello.png
こんなのを書いてコンパイルしたら,
hello_console.png
こんなのがでてきて,
hello_output.png
やったあ!変数も使ってみましょう,
hello_var.png
どうかな?
hello_var_console.png
(´・_・`) ・・・・・・訳が分からないよ・・・
ローカル変数の宣言部分(.locals initから)のところに余計なカンマがあるのが原因だったのでそれを取り除くスクリプトをD言語で書きました.昔のアセンブラは構わず通してたんだろうか・・・

Unity

D.NETに付属しているライブラリファイルではConsole.WriteLineしかできないので面白くありません.せっかくの.NETなのですから,Unityでも使えるようにしてみましょう.
nettod.png
.NETのアセンブリ(dll)から宣言を抜き出すプログラムを書いてmscorlib.dllとUnityEngine.dllに対して走らせます.
するとD言語でimportする用の.dファイルの出来上がり!
unityengine.d.png
やったー.自作のMonoBehaviourを書きます.
DBehaviour.png
コンパイルしたdllをUnityのエディタに放り込んで,
DBehaviourInUnity.png
スクリプトをアタッチできたぞー!!!
AttachDBehaviour.png
後はテキトーにゲームを一本書くだけだなと,このとき(24日夜)は思ってたのですが.

MissingMethodExceptionの罠

NotFound.png
dotPeekで見る限り.dファイルは正常に生成されているし,ILにも特別不審な点は見当たらないのですが,なぜかMissingMethodExceptionが出てうまく動きませんでした.

DKid.png
靴下持ってプレゼント(D言語くん)を待ち構えている子供(D言語くん)のモデルも作ったのに・・・

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away