13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

STYLYのインタラクションを遊び始めようとしているあなたへ

Last updated at Posted at 2019-05-20

インタラクションは沼

STYLYのインタラクションを遊び始めたときの私の感想です。
STYLYでは多数のデモの記事が投稿されていますが、リファレンスという形では纏っていません。また、デバイス毎に動きが違うということがざらにあります。

というわけでインタラクションのリファレンスをまとめました。

ここでは"完全に理解した”程度を目標に、インタラクションの基本とポリシー、リファレンス、STYLYのUpdate予定を紹介します。
ちなみに、STYLYなんぞという方はこちらから見て頂くと分かりやすいです。

インタラクションの基本

インタラクションの一般的な処理フローは、Userによるインプットに始まり、各Deviceのインプットを取り扱うInput Systemにより数値化され、Simulation System内でInputに対する動きをまとめたLogicにより各オブジェクトの状態が変わり、オブジェクトをレンダリングした結果がOutput Systemを通してUserに届きます。
styly_rikaisita_interaction_basic.png

ここで言うSimulation SystemとはSTYLYのことですが、STYLYでインタラクションを実現することを考えると、取り扱えるInputとLogicを理解するとよさそうです。

現状STYLYが取り扱うInputは2種類あると考えられます1

  1. From input system
    Input System由来のものです。マウスやキーボードといったLegacy Inputもそうですし、HMDやコントローラの角度情報等も取れます。
  2. From other game objects
    シーン上の他Objectの動作がInputになることがあります。例えば、Userが投げたボールが等速運動で転がり何かにぶつかる時に、ユーザに何か提示することを考えると分かりやすいでしょう。

これらのInputを取り扱うLogicもこれまた2種類あります2

  1. STYLY preset game objects
    STYLYでは起動時に配置されるObjectがあります。具体的にはUserをモデル化した、Main CameraとControllerがそれにあたります。これらのObjectはデフォルトでキーアサインされており、視点変更や移動といったVRにおいて一般的なインタラクションを実現してくれます。
  2. User uploaded assets
    STYLYデフォルトのインタラクションだけでは物足りない場合は、自身で実装することができます。基本的にはUnity上でprefabなどにPlayMakerでインタラクションを実装したものを、STYLY Unity Pluginを用いてUploadします。UploadするとAssetとして自由に配置することができ、配置した瞬間にPlayMakerのFSMが動き出します。

これらの詳細がどのようになっているかはリファレンスの章で説明するとして、残る疑問はSTYLYのインタラクションに対するポリシーでしょう。以降は私なりの解釈になりますので、興味がない方はリファレンスまですっ飛んでください。

STYLYのインタラクションに対するポリシー

STYLYのインタラクションに対するポリシーを一言で言うと、クリエイターの皆さんはコンテンツのクオリティコントロールをする責務を負っている、です。
このポリシーを読み解くには、STYLYの特徴を理解する必要があります。私が思うに、STYLYには2つの大きな特徴があります。

  • マルチデバイス性
    複数のデバイスで視聴できる環境が提供されることで、様々なユーザが触れられる機会を得られます。
  • 簡単に作れて即時配信
    Web Editorという強力なシーンエディタ上で作れるのはもとより、数クリックで作品を公開できてしまう戸門の広さはクリエイターに表現の自由を与えてくれます。

こう考えてみると、ユーザとクリエイターを直接繋ぎ加速することこそが、STYLYの正体なのかもしれません。この前提で、STYLYのインタラクションを振り返ると、インタラクションに関して、すべての領域でマルチデバイス性を保証できるわけではないという事実が横たわります。環境によって異なるデバイスのInput System差分を吸収し切れていません。クリエイターはこの状況を考慮したうえで作成するわけですが、すべてのデバイスに平等なインタラクションを提供するコストは膨大です。そもそもデバイス自体の特性により正しく表現できないことの方が多いでしょう。ともあれインタラクションを実現すると対応デバイスが絞られるので、クリエイターはどのようなエンドユーザに見てもらいたいか、そのエンドユーザの体験環境を想定して実現する必要があります。これが、クリエイターがクオリティコントロールをする責務を負うことの根拠となってます。

次章でリファレンスを紹介しますが、STYLYのマルチデバイス性を保証できる領域と、クリエイターがクオリティコントロールすべき領域に分かれているという前提を心に留め置いてご覧ください。3
D5oFSKvUUAIT6Jb.jpg

リファレンス

PlayMakerで実装するのに必要な要素を1枚にまとめました。
image.png

これではあまりにあまりなので、それぞれについて読み方を紹介します。

Default key assign

デフォルトキーアサインされているインタラクションは以下の通り。
image.png
こうしてみると、対応関係にDesktop、PCVR、6Dof Stand alone、3DoF Stand aloneの違いがよく出てますね。
詳細は以下の通り

  • Gaze : 視線の変更
  • Walk,Up/Down : 歩行と上下の移動
  • Transport : トランスポートはVRでの一般的な移動表現。
  • Rotate : その場で回転
  • Back to menu : STYLYのメニュー画面に戻る
  • Screen plane move : 描画面を水平に移動する
  • Zoom In/Out : Main Cameraの一時的なズーム
  • Other Assign : その他特殊な機能等の備考
    • PCVR : 右トラックパッドクリックでカメラ機能
    • Oculus Go : TriggerでMouse Click4

Events

ここでいうEventとは、PlayMakerのEventのこと。
image.png

  • Actions
    PlayMakerのActionには、Inputの状態を取得したり、Eventを待ち受けるものがある。と言ってもLegacy Input分しか用意されてないので、Desktop Support向けに利用するといいだろう。
  • Events
    PlayMakerのEventの仕様にあるEventは一通り使える。
    さらに追加でSTYLYがPCVRのコントローラ向けにCustom Eventを用意している。
    これでトリガーボタンとグリップボタンをHandleできるようになる。
Custom Events Left hand Right hand
Trigger Down Global_TriggerPressDown_L Global_TriggerPressDown_R
Trigger Up Global_TriggerPressUp_L Global_TriggerPressUp_R
Grip Down Global_GripPressDown_L Global_GripPressDown_R
Grip Up Global_GripPressUp_L Global_GripPressUp_R

Game Objects

インタラクションする対象となるObjectが、自身が作成しているAssetsに収まってるなら内部で参照するだけ。では、Object間の連携をしたい場合はどうしましょう。一部を除き、基本的にはPlayMakerのActionであるFind Game Objectを使って探すことになりますが、そこで必要になるのがObject nameです。STYLYが提供しているものと、クリエイター自身が用意する2種類あります。
image.png

  • Preset Game Objects
    STYLYは起動するとデバイスに合わせていくつかのObjectを生成します。
    そのObject名が公開されているので、これを使えば参照できるようになります。
    例外として、MainCameraだけはActionであるGet Main Cameraを使えば、全ての環境で利用することができます。
Object Name memo
Main Camera Web Player、Desktop以外はサポート外。Get Main Cameraつかうよろし。
Controller (right) PCVRコントローラの右手。PCVR以外はサポート外。
Controller (left) PCVRコントローラの左手。PCVR以外はサポート外。
  • User Uploaded Assets
    自身でアップロードしたAssetsを参照したい場合で思いついたのはこの2つ。
    • Bundle assets into prefab
      そもそもAsset分ける必要ないならひとまとまりにするのが案外幸せですよ、という忠告。
      Prefabの子として存在するならFind Childで参照できて楽です。
    • Refer uploaded assets
      アップロード済みのアセットをシーンに配置したなら、Asset名で参照できる。ただし、prefab名ではない。
      ここで具体的な方法が書かれてるが、UploadしたAssetのユニークIDで指定する必要がある。5

Game Objectの参照が取れたら、あとはSend Eventなりで連携するだけです。
Object nameわからないなら、最悪Bloadcastしてしまうという方法も。場合によってはその方が効率がいいこともありましょう。

デバイスとの対応関係

ここまで紹介してきたリファレンスですが、ざっくり各デバイスとの対応関係を示すと以下のようになります。
image.png
一部補足すると、

  • 先述した通り、OculusGoのコントローラトリガーボタンはMouse系で取得できる
  • PCVRのアプリは実は一部のLegacy Inputを受け付けることができる。
    これはつまり、HMDを被った人、Desktop画面で操作する人の2P Playができるということだ!

実際にこれらのEventが発火する様子を見れるようにしたデモシーンを作りました。
Interaction Test
こちらをつつきながら図を見比べると分かりやすいかと思いますが諸注意など。

  • Eventに関しては、対応するものが発火すると回ります。止まりません。
  • Game Objectsに関しては、STYLYさんが用意しているものについてRotateをそのまま反映してあります。見つからなかったらNot foundと表示されます。

STYLYのUpdate予定

インタラクションに関して、私の知っている限り2つのUpdate予定があります。6

  1. Labs
    Labsについてはすでに公開されていますが、ある程度の定型アクションはLabsのAssetsとして公開されるようです。

  2. FSM Templateの配布
    PlayMakerのFSMはTemplateとして保存できるのですが、STYLYでよく使うものはTemplate化して配布するようです。

おわりに

ここまで読んだあなたはSTYLYのインタラクション完全に理解した:wink::v:と言っても過言ではないでしょう。

これでインタラクションを実装できるとはいえ、STYLYはまだ発展途上ですし、あなたの表現したいことが表現できないこともあると思います。
そんな時は、ぜひSTYLYさんに要望を出してください。あの人たちはツイ廃なので、気軽につぶやくといいですよ

  1. MR対応することを考えると、ここは増えるんじゃないかな。だって、現実と混ざるんだから。

  2. 将来的に3種類目のLab機能が提供される。

  3. 図中ではデフォルトキーアサインをマルチデバイス性保証できてるとしているが、こんなバラバラな状態で保証していると断言するのは心苦しい。

  4. これは別にSTYLYが、というよりOculus SDK標準動作なのかな。

  5. ユニークIDをハードコーディングする必要があるとか正気の沙汰とは思えないのだが、私だけだろうか。

  6. 代表の山口さんがこことかここで教えてくださった。

13
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?