Unityでスタイラスペン入力する

  • 投稿日:
  • by
  • カテゴリ:

Unity5.2はペン(デジタイザー、スタイラス)による操作に対応していないようです。

AssetStoreに対応プラグインが一つあったがUnity5で動かない模様。

Panasonic ToughPadやMicrosoft Surface Proなどペンを使った端末で動かしたい場合、

ワコムのWintabというタブレット用APIを使うプラグインを用意する必要があります。

以下、簡単に手順を書いておきます。

 

1)ワコムのドライバーに含まれるWintab32.dllを入手。

下記をインストールすると /Windows/Systems32 と /Windows/SysWOW64 内に入ります。

http://us.wacom.com/en/feeldriver/

 

2)Wintab32.dllを使うための .NET ラッパー「WintabDN」のソースを入手。

http://www.wacomeng.com/windows/code/WintabDN.zip

 

3)Visual Studio Expressをインストールして、WintabDNプロジェクトをビルド。

※Visual Studio Express 2015は巨大なので2013で充分。

※プロジェクトのプロパティで対象フレームワークを「.NET Framework 3.5」、出力の種類を「クラスライブラリ」に。

※.NET4用のコードでエラーが出る個所は、.NET3.5用に修正する。

 

4)ビルドしてできたWintabDN.dllをUnityプロジェクトの/Assets/Plugins/に入れる。

 

5)下記のコードをほぼそのまま使わせていただく。

http://forum.unity3d.com/threads/wacom-tablet-input-script-in-c.317154/

※一部、コメントアウトやアンコメントする必要あり。

※MyWTPacketEventHandlerにペン座標と筆圧が届きます。

※アプリ終了時のハング対策としてmonoスレッドを閉じるコードの追記が必要。

 

6)ペン座標をUGUIのEventSystemに渡すためにStandaloneInputModule.csを参考にして

StylusInputModule.csを作る。

https://bitbucket.org/Unity-Technologies/ui/src/0155c39e05ca5d7dcc97d9974256ef83bc122586/UnityEngine.UI/EventSystem/InputModules/?at=5.2

http://tips.hecomi.com/entry/2014/09/25/233823


追記:

アプリを起動して初めてタッチするときに30%くらいの確率でエラーダイアログが出る現象が起きた。

ログを見るとDllNotFoundExceptionが起きてる。

回避策としては、下記のような感じでcontextをopenした直後にGetDataPacket()を実行すること。

m_logContext = OpenTestSystemContext(ctxWidth_I, ctxHeight_I, ctrlSysCursor_I);

WintabPacket pkt = m_wtData.GetDataPacket((uint)m_logContext.HCtx, 1);

理由はわからないけどこれでエラーが起きなくなった。