概要
パーティクルエフェクトを作成しゲーム内で使用できる便利なツールに「Effekseer」というものがあります。Effekseerで作成したエフェクトはDirectXやOpenGLによりゲーム内で再生でき、DXライブラリ用のライブラリ「Effekseer For DXライブラリ」を使えばDXライブラリを用いたゲーム内でもEffekseerで作成したエフェクトを再生することができます。
しかし、本記事投稿時点でEffekseer For DXライブラリの最新バージョン1.22が対応するコンパイラはVisual Studio 2015(MSVC14.0)までとなっており、Visual Studio 2017(MSVC14.1)では使用することができません。
そこで、本記事ではVisual Studio 2017(以下VS2017)でEffekseer1.22 For DXLibを使用する方法を説明していこうと思います。DXライブラリやEffekseer1.22 For DXライブラリの導入方法はここでは説明しないのでご了承ください。
問題と解決法
Effekseer For DXライブラリでは、#pragma commentを用いてリンクするlibファイルを指定しています。リンクするlibファイルはMSVCのバージョンによって異なり、バージョンの判定部分で_MSC_VERが1700(VS2012)、1800(VS2013)、1900(VS2015)の場合以外は弾かれるようになっています。このため、_MSC_VERが1910であるVS2017ではlibファイルがリンクされず、リンク時にエラーが発生してしまいます。
このバージョン判定はEffekseerForDXLib.h内で行われており、同ファイルの16行目と56行目にある
#if _MSC_VER ==1900
を
#if _MSC_VER >=1900
とすることで、VS2017使用時にもlibファイルがリンクされ正常に動くようになります。
ちなみに、この方法ではVS2015向けにビルドされたlibファイルをVS2017でビルドしたファイルとリンクすることになるので問題が発生するのではないかと思うかもしれませんが、VS2017はVS2015とバイナリ互換である(Visual C++ Team Blogyより)ので、問題はないようです。