8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

D言語Advent Calendar 2015

Day 25

unity4d

Last updated at Posted at 2015-12-25

できることはやった

#成果物
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言語くん)のモデルも作ったのに・・・

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?