概要
完全にこれはバッドノウハウと言うか、相性問題なので僕がハマったこと、解決策を書くことで他の誰か(含む未来の僕)が回避できればそれで良いつもりの、雑なエントリです。
環境
- Windows 8.1(64bit)
- Unity 4.3.4f(Pro)
- OvrvisionSDK v0.6
- LeapSDK v2(beta)LeapMotionSkeletalAssets-0d307adfc4e34b9c828e42c01c7c79b0.unitypackage
症状
OvrvisionSDKを含んだプロジェクトに、LeapSDKのunitypackageを追加して、Unityを一度終了して再度開きデバッグ実行すると、Ovrvision系のスクリプトからdllNoFoundExceptionエラーが起きてしまう。
これは最小構成でも再現した。
[未検証注意]僕の環境でUnityPro4.3.4+OvrvisionSDK v0.6のプロジェクトにLeap v2(beta)をパッケージインポートしてUnity終了して再度立ち上げるとOculus.dllがdllNotFoundException吐きます。再現性確認します。
— izm @電脳フィギュア (@izm) May 20, 2014
例えばパッケージインポートがいけない。と言う訳ではなく、leap v2(beta)のマテリアルだけをインポートした分には再現しませんが、dllをインポートすると発生します。うーむ、奥が深い。ちょっとまっさらのプロジェクトを作って追試してみます。
— izm @電脳フィギュア (@izm) May 20, 2014
対処法 根本的な対処が下にあります!そちらを参照ください
@izm 自PCだけで良いなら、oculus.dll の置き場所を変えてみるとか・・^^; C:\Windows 以下に入れちゃうとか。。。それで動くかどうか知りませんが。。
— fai into VR (@faifx) May 20, 2014
@izm Leap持ってないので勝手な想像ですが、LeapのDLLがカレントディレクトリを変えてしまっていて、その結果、Plugin 内のoculus.dll を読めなくしちゃってる系のエラーなのかなっと思ったまでです。。
— fai into VR (@faifx) May 20, 2014
OculusPlugin.dll ovrvision.dll ovrvision_ex.dllの3個のdllを
Systemフォルダ(C:Windows\System32)にコピーしてしまうことで、回避できました!faiさん天才!
https://t.co/gnfKRfxzFR
— izm @電脳フィギュア (@izm) May 20, 2014
まとめ
dllあるのに無いって言われたら無理やりパスを通してしまう!というのは常にオプションとして覚えておくと良い。 faiさんありがとうございました!
fai into VR (faifx) on Twitter
以下、翌朝に追記
根本的な対処
LeapMotionSDKのフォーラムを見ていたら、同様の症状が報告されていた。
https://community.leapmotion.com/t/skeletal-tracking-developer-beta-is-now-public-new-build-sdk-v2-0-0-15464/1120/9
known issueなようです。(いつかは解決するはず) Unityを一度閉じて Assts/Pluginにあるleap関連のdll群を
に移動して、plugin直下はフォルダだけにして再起動すると解決します。
Unityはdllを読みに行く場所の順序と言うのがあって、作法としては
に配置するのが正しい。 しかしLeapSDK v2(beta)はそれらフォルダの親フォルダにdllを配置してしまう。これは行儀がよろしくない。
これはUnityからすると「プラグインのdllはこのプロジェクトのどこかなー?」と探した時にLeapのdllを見つけて「Assets/Pluginの場所がdll置き場」と勘違いしてしまっている。
それ自体は問題ないが、他のdllを含むプラグインと共存しようとすると、他のdllが一切見つからない状況になってしまう。と言う訳だそうです。