今までも何度かやった経験はあるのだが、Unityで外部DLLのライブラリをコールする方法について、書いておく。 今回、いくらやっても動かず、5時間ぐらい格闘してしまったので、また同じことにならないように備忘録として、また、初めてやる人の参考として簡単にまとめておく。 DLLはVisual StudioのC++でビルドして作り、これをUnityにインポートして、Unity ScriptからC++のファンクションコールする、という流れである。今回、あまりに動かないんで、最後の最後、もっとも簡単なコードにして確認した。もちろん、この簡単コードはUnityのマニュアルにもあって、それとそれほど変わるところは無いんだが。 DLL側のコード extern "C" __declspec(dllexport) int Add(int a, int b) { return(a + b); } Visual Studio 2015使用。C++のWin32アプリでDLLを選んでプロジェクトを作る(名前をdlltestとしよう) ごちゃごちゃファイルができるがそのままやってもいいけど、今回、メインのdlltest.cpp以外のstdafx.hとかそういうのは全部消しちゃった。 上記コードをdlltest.cppにコピペ(ヘッダーも何もなく、これだけ) ビルドする。設定はReleaseのx64。つまり64ビットDLL dlltest.dllができる Unity側のコード using UnityEngine; using System.Runtime.InteropServices; public class NewBehaviourScript : MonoBehaviour { [DllImport("dlltest")] public static extern int Add(int a, int b); void Start () […]
Yearly Archives: 2016
3 posts
前の投稿で予告したので、リアル系のセットとキャラで今回のTVMLエンジンを動かしたところを貼っておく。 セットはUnity5のGlobal illuminationとかPhysical based shadingとか、わりとふんだんに使っている。キャラはフリーのキャラで、動きもフリーのBVH再生で、リアルというよりは気持ち悪いが、いつものPooni君ばかりでないことだけは分かってもらえるであろう。 実はこれまでのTVMLエンジンではこれがきちんとできなかったのである。今回、CGのセットやキャラ、照明などはすべてUnityのScene任せにしてTVMLからは一切コールしないことで、このようなことが格段にやりやすくなった。TVMLは演技を記述しているだけで、一切の初期設定は不要である。TVMLスクリプトには、最初からいきなり character: look(name=Mia, target=camera, wait=no) character: talk(name=Mia, text=”こんにちは、みなさん”) character: talk(name=Mia, text=”これはまだリハーサルなのですが、お見せしています”) と書けば、その通りに動く。 まだまだ、ショットとかぜんぜんイマイチなのだが、急ぎでやったのでご勘弁を。とにかくも、今回のエンジンのおかげでこんな絵も作りやすくなりました、ってことで。 ではでは。