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);

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


BootCampでWindowsを起動中に

MacintoshHDにアクセスしたいのにエクスプローラでドライブが認識されない。

原因はMacintoshHDが論理パーティションになっているためでした。

ターミナルから「diskutil cs revert disk[指定ディスク番号]」とするだけで

論理ボリュームグループを解除してWindowsから認識されるようになりました。

 

参考ページ:

http://www.macotakara.jp/blog/mac_os_x/entry-25055.html

Q-BLOCKで3Dプリント

  • 投稿日:
  • by
  • カテゴリ:
Q-BLOCKのスマホアプリから3Dプリントできるようになりました。
かんたんに投稿作品をDMM.makeの3Dプリントサービスで注文でき、
立体フィギュアとして手元に届きます!

加えて、自分でイチから作った作品はVRML形式の3Dデータファイルとして
書き出せるようになりました。
※他人の作品や、他人の作品を改変して作ったものはファイル書き出し不可です。

Q-BLOCK | ちょゲつく オフィシャルサイト

Unityの3Dサウンドとステレオ

  • 投稿日:
  • by
  • カテゴリ:
ヘッドフォンで聞いて初めて気づいたんですが、
ゲーム内のBGMをステレオで鳴らしているはずなのに
モノラルのように聞こえてしまう現象について。

音ファイルのInsperctorを見るとデフォルトで「3D Sound」にチェックが入っています。
そして3D空間内で音を鳴らす場合は、
音を出す位置のオブジェクトにAudio Sourceをつけて
聞き取る位置のオブジェクトにAudio Listenerをつけるという使いかたをするみたいです。

今回、3Dサウンドの必要がないのに3D Soundになっており
しかもAudio SourceとAudio Listenerを同じオブジェクトにつけていたので
結果としてモノラルのような中心で鳴っている状態になりました。

3Dサウンドではなく普通のステレオとして鳴らしたい時は、
音ファイルのImport Settingsで「3D Sound」のチェックを外すことを忘れないようにということです。

UnityでKamcord

  • 投稿日:
  • by
  • カテゴリ:
プレイ動画共有プラグインKamcordについて、
7月22日時点でExample Integrationsでダウンロードできるサンプルプロジェクト「Penelope-Kamcord-Example.unitypackage」は古いようで、XCodeでビルドエラーがでます。


Unity Quick Start Guideでダウンロードできる「Kamcord.unitypackage」なら大丈夫。

スマホで立体ドット絵!Q-BLOCK

  • 投稿日:
  • by
  • カテゴリ:
Web版Q-BLOCKの公開から5年を経て、ついにスマホアプリになりました。
iPhoneでもAndroidでも好きなだけ3Dドット作品を作れます。
みんなの作品を眺めるだけでも楽しいのでぜひダウンロードしてください!

【Unity】NGUIでマスクによる切り抜き

  • 投稿日:
  • by
  • カテゴリ:
NGUIを使って表示しているものを
クリッピングマスクで動的に切り抜く方法についてのメモ。

例えば、画面全体を黒いUISpriteで覆っていて
その一部を丸くくり抜いて奥が見えるようにする場合。

まず黒いUISpriteは普通に配置。Transformは Z = 0 にする。
次にマスク用GameObjectを配置してTransformは Z = -1 にする。
マスク用GameObjectにUITextureコンポーネントをアタッチする。
UITextureのShaderとして"Unlit/Depth Cutout"を設定する。
UITextureのTextureとしてアルファチャンネル付きの画像を設定するとその形でマスクできる。

Z値でマスク対象が決まるので
Z=0以上のNGUI表示物はすべてマスク対象になる。
Z=-2に設定したNGUI表示物はマスクされない。

【Unity】NGUI、Galaxy S3で表示が崩れる

  • 投稿日:
  • by
  • カテゴリ:
NGUIで作った画面を10秒ほど放置すると表示が消えたりぐちゃぐちゃになる現象が
Galaxy S3など特定の端末で起きる。

Player Settingsで「Multithreaded Rendering」と「GPU Skinning」のチェックボックスをオフにすると治るらしいです。


参考ページ:

Xcode5.1にアップデートしたところ、
Unityで'Build And Run' ã‚’してもXcodeプロジェクトが立ち上がらなくなり下記のエラーが出た。

"UnityException: Launching iOS project via Xcode4 failed. Check editor log for details"

解決策は下記の手順。

1)下記のファイルをテキストエディタで開く
Unity.app/Contents/BuildTargetTools/iPhonePlayer/Unity4XC.xcplugin/Contents/Info.plist

2)下記の行を見つける
<key>DVTPlugInCompatibilityUUIDs</key>
<array>
<string>63FC1C47-140D-42B0-BB4D-A10B2D225574</string>
<string>37B30044-3B14-46BA-ABAA-F01000C27B63</string>
</array>

3)<array></array>内に下記を追記する
<string>A2E4D43F-41F4-4FB9-BB94-7177011C9AED</string>

4)保存して、Xcode再起動



参考ページ:

【Unity】UUIDの生成と保存

  • 投稿日:
  • by
  • カテゴリ:
Unityでは端末固有ID取得用に SystemInfo.deviceUniqueIdentifier ãŒã‚りますが
これはiOS7ではidentifierForVendor、iOS6などではMACアドレスのhashということでなんか微妙な感じ。
identifierForVendorは同じベンダーのアプリが1つでもインストールされていれば変化しないけど
そのベンダーのアプリ全部削除すると、再度インストールするときには変化する。
あと、iOS6.0のidentifierForVendorではバグがあるとか。

今回欲しいのは、不変の端末IDではなくインストールのたびに変わるユニークIDだったので
下記のように.NETの機能を使うと良いみたい。
System.Guid guid=System.Guid.NewGuid();
string 
_uuid=guid.ToString();
36バイトの文字列が生成されます。

初回起動時に生成した文字列をローカルに保存しておきたいわけですが
PlayerPrefsクラスを使います。
//セーブする時
PlayerPrefs.SetString("uuid",_uuid);
PlayerPrefs.Save();
//ロードする時
string _uuid=PlayerPrefs.GetString("uuid");

iOSの場合、PlayerPrefsは /Library/Preferences に保存されるそうなので
iTunesのバックアップ対象になるはず。