VR(特にルームスケールVR)での操作を改善するプラグイン。今のところHTC Vive専用です。GripMovePluginと目的は同じで一部機能は重複しています。
コントローラのメニューボタンを押すとコントローラメニューが表示されます。
メニューは階層構造になっていて、トリガーで前のメニュー戻ります。
※画像中にあるAddModsSlider,VibeYourMaidは本プラグインとは関係ありません。
GUIは、GripMovePluginと同じようなパネルになっています。メニューボタン長押しでパネル位置をリセットします。
※GUIでのクリックは、デスクトップのゲームウィンドウ上でのクリックに変換されます。(デスクトップのゲームウィンドウにはGUIは何も表示されていませんが、そこにGUIは存在しているのです!)**デスクトップのゲームウィンドウが他のウィンドウに隠れていたり、モニタの外に出ていたりすると、そこはクリックできません。また、ゲームウィンドウを16:9より横長にするとGUIの上下にクリックできない領域が発生します。**全領域をクリックできるようにするために、ゲームウィンドウは16:9より若干縦長にすると安全です。クリックできないところにポインタを持っていくと、ポインタはクリック不可を示す赤い表示になります。
※GripMovePluginと違って、プラグインのON/OFF操作はないので、プレイ中に元のGUI表示に戻すことはできません。また、旧GUI専用パネルもありません。1つのGUIパネルの両方表示します。
コントローラによる操作は、公式の機能をほぼ無効化して、プラグイン側で再実装しました。 コントローラメニューのMODEから操作モードを変更できます。メニューボタンをダブルクリックで直前のモードに戻ります。
操作はコントローラの先にある半透明の丸いポインタで行います。ポインタの位置や大きさは設定で変更できます。基本的にどのモードでも、ポインタをGUIパネルに近づければGUIは操作できます。トリガーとグリップは、選択中の操作モードで上書きされてなければ、「掴む」操作となります。掴めるオブジェクトはトリガーでもグリップでも掴めます。ただし、掴んで動かしたときの挙動がトリガーとグリップで若干違います。(下表参照)
掴む対象 | トリガー | グリップ |
---|---|---|
背景 | XZ回転およびY方向移動が無効※ | XZ回転無効※ |
GUI | 制限なし | 制限なし |
メイドさん | XZ回転無効 | 制限なし |
オブジェクト | XZ回転無効 | 制限なし |
IK | 制限なし | 制限なし |
※設定で変更可能です。
その他、トリガー+メニューボタンで位置リセット(ワールドをXZ回転していたばあいはXZ回転リセット)
基本モードです。ポインタがGUIから離れていてもトラックパッドでクリックできます。クリックは公式と同じでトラックパッド左半分が左クリック、右半分が右クリックです。クリックは実際にデスクトップ上のゲーム画面のクリックになるので、他のウィンドウに隠れてる等ゲーム画面がクリックできないとポインタが赤くなります。
ワープによる移動です。トラックパッドを押すと白い球体が出現します。この球体が移動先です。表示はされませんが、コントローラの向きから放物線軌道を計算しています。球体の高さはトラックパッドの左右どちらを押しているかで変わります。左を押してるときは実空間の床の高さ、右を押してるときはゲーム内背景のy=0の高さとなります。
公式のカメラモードです。
アイテム呼び出しモードです。GUIに画面が出てきます。ちょっと分かりにくいですが、最初は縦長の画面で、右上の「>」を押すと右に広がって、上にあるボックスをクリックするとカテゴリを選択できます。
出現させたアイテムは、アイテム中央にあるボックスを掴んで移動できます。ボックスは最初は表示されていませんが、トラックパッドクリックでボックスの表示ON/OFFを切り替えできます。
出現させたアイテムは改造版ShapeAnimatorでシェイプキーを操作できます。
夜伽シーンで使用可能なモードです。トラックパッドにコマンド選択を表示します。
GripMovePluginを入れていると撮影モードで使用可能になるモードです。GripMovePluginを使って、選択中のメイドさんのIKを操作します。
デフォルトだと何も入っていません。
CM3D2.VRMenu.MyKeyInput.dllを入れると、「VibeYourMaid」と「デスクトップスクリーン」が追加されます。
コントローラをペンライトやおもちゃに変化させます。公式のITEMモードと同じです。
設定などのメニューです。VRMenuプラグインの設定は下で説明します。
CM3D2.VRMenu.MyKeyInput.dllを入れると、マイメニューが追加されます。マイメニューの各項目は単にキー操作をエミュレートするだけなので、各プラグインのキー設定を変更するか、CM3D2.VRMenu.MyKeyInput.csを修正するかして、キーを合わせておかないと、表示内容と実際の動作が一致しません。
VRMenuプラグインの設定は、コントローラメニューMENUにある「VRMenu設定」と「ポインタ設定」です。
- GUIサイズ
- GUIパネルのサイズを変更します
- 頭の高さ調整
- 位置リセット時の頭の高さを調整できます。
- LightPhysics
- 付属のLightPhysicsプラグインのON/OFF設定です。LightPhysicsプラグインがインストールされていない場合は表示されません。LightPhysicsプラグインはメイドさんを複数出したときのフレームレート低下を防ぐプラグインです。髪やスカートの計算を犠牲にして、フレームレートを向上させます。フレームレートは高くなりますが、代わりにメイドさんの髪やスカートがカクカクになります。メイドさんが1人だけのときは何もしません。※GPUがボトルネックとなっている場合は効果がありません。ただし、VR ReadyなGPUならほぼ確実にCPUがボトルネックとなっていると思います。
- ポインタを常に表示
- ONにするとポインタが物に隠れなくなります。
- 掴み設定
- 各オブジェクトを掴めるかの設定
- トリガーでのワールドY移動
- トリガーでのワールドY移動をできるようにするか
- グリップでのワールドXZ回転
- グリップでのワールドXZ回転をできるようにするか
- ポインタサイズ
- ポインタのサイズを調整できます。
- ポインタ距離
- コントローラからポインタまでの距離を調整できます。
C#のコードを書く必要がありますが、簡単にできます(多分)。CM3D2.VRMenu.MyKeyInput.csを見てください。 このファイルは他のプラグイン等には依存していないので、単体でAutoCompileできると思います。
ReleaseページにあるVRMenuPlugin.zipのSybarisフォルダをコピー
PluginExt.dllに依存しています。まだ入れてない方は、ここからDLLを落としてUnityInjectorフォルダに入れておいてください。
最小構成で使いたい場合は、 CM3D2.VRMenu.Plugin.Patcher.dll
と CM3D2.VRMenu.Plugin.dll
だけあれば使えます。他の各ファイルは以下の通り
DLL | 説明 |
---|---|
CM3D2.VRMenuWithGripMove.Plugin.dll | GripMovePluginと共存させる場合は必須です。GripMovePluginのIKモードを追加します。 |
CM3D2.VRMenu.MyKeyInput.dll | メニューを追加するサンプルです。なくてもOKです。これで追加されるメニューのうち「マイメニュー」はキー設定が合っていないと思うのでそのままでは使えません。 |
CM3D2.LightPhysics.Patcher.dll | LightPhysicsプラグイン。フレームレートを改善するプラグインです。デフォルトでは無効の状態になっていて、VRMenuプラグインから有効にします。ソースコードは諸事情により公開していません。 |
CM3D2.LightPhysics.Managed.dll | LightPhysicsプラグインの一部です。 |
プルリクして頂ければ基本取り込みます。メニュー・モードの追加とか、Oculus Touch対応とか(私は持っていないので)、大歓迎です。
参照してるライブラリのパスを解決させればビルドできると思います。依存ライブラリはリポジトリルートのCMLibraryフォルダにパスが設定されています。
CM3D2.VRMenu.MyKeyInput.csと同じようにやれば追加できます。本プラグインはVR版でしかロードできないので、通常版でも動くプラグインでVR用コントローラメニューを追加する場合は、リフレクションを使ってください。
モードの追加や、ボタンを押したときの挙動を作り込みたい等は、多分、プラグインを参照に追加しないと難しいと思います。
私の書いたコードはMITライセンスとします。
- MODはKISSサポート対象外です。
- MODを利用するに当たり、問題が発生してもKISSは一切の責任を負いかねます。
- カスタムメイド3D2を購入されている方のみが利用できます。
- カスタムメイド3D2上で表示する目的以外の利用は禁止します。
- これらの事項は http://kisskiss.tv/kiss/diary.php?no=558 を優先します。