SharpDX + BulletSharp

物理演算をやりたい。

Bullet を使う

Bullet の使い方は、以下の書籍から習いました。

Amazon.co.jp: Learning Game Physics with Bullet Physics and OpenGL 電子書籍: Chris Dickinson: Kindleストア

サンプルソースコード付きでページ数の少ない本で、とりあえず初めて見る目的で読む分には都合が良いと思いました。

公式のサンプルはどうもミニマムじゃないので分かりにくい。

3 章まで読んだ内容で、コリジョンを処理するプログラムを作成しました。


BulletSharp for SharpDX を使うとビルドエラーが起きる

Bullet を使うよりも、BulletSharp を正しく使える環境を用意することに時間がかかりました。

nuget から SharpDX を導入している環境で BulletSharp for SharpDX のアセンブリを参照して実装を行うと、ビルド時にエラーが出ました。

Error 1 The type 'SharpDX.Vector3' is defined in an assembly that is not referenced. You must add a reference to assembly 'SharpDX, Version=2.6.3.0, Culture=neutral, PublicKeyToken=null'.

SharpDX がアカンといわれる。参照しているはずなのに。
nuget から SharpDX を導入した場合、以下の SharpDX.dll が参照されていました。

packages\SharpDX.2.6.3\build\..\Bin\DirectX11-Signed-net40\SharpDX.dll

これは、"SharpDX, Version=2.6.3.0, Culture=neutral, PublicKeyToken=b4dcf0f35e5521f1" な DLL です。
PublicKeyToken が null ではない。

どうも、BulletSharp は、PublicKeyToken=null な SharpDX しか受け付けないようなビルドが行われているっぽい?

そこで、nuget から SharpDX を導入した時に一緒に落ちてきている以下の Unsigned な DLL を参照するように変更します。

packages\SharpDX.2.6.3\build\..\Bin\DirectX11-net40\SharpDX.dll

これで正しくビルドが通りました。