【Unity/Playmaker】コントローラーで物体を投げる機能を作る

皆さんこんにちは!今回のチュートリアルをすすめる前に、次の動作環境を満たしていることをご確認ください。

事前に必要な設定

  • ご使用のブラウザでSTYLYが動作することをご確認ください。STYLYへサインインすることで動作確認ができます。
  • ご使用のPCでスムーズなコンテンツ作成を行うには、最低でも4GB以上のRAMが必要です。
  • 必要なコンポーネントを含んだ、Unity 5.6.3p1のインストールが必要です。
  • UnityでPlaymakerプラグインの購入とインストールが必要です。
  • こちらから、Unityからシーンのアップロードをするために必要なSTYLYプラグインのインストールが必要です。

このチュートリアルは、Unity x Playmaker x STYLY チュートリアルシリーズを読了していることを前提に作成されています。まだ読まれていない方は、先にお読みいただけると幸いです。それでは、コンテンツの作成を始めましょう。今回のチュートリアルでは、コンテンツの作成はUnity上で行い、その後STYLYプラグインを使用してSTYLYへエクスポートします。 それでは、Playmakerを使ってSTYLYのシーンをインタラクティブなものにする方法を解説していきます。今回は、シンプルなボールを使ったゲームを作成します。まず環境を作成するにあたって、3Dwarehouseからフリーのクリケットスタジアムモデルをダウンロードします。残念ながらスタジアム内のウィケットはメッシュの一部のため、今回のシーンでは使用できません。なので、スタジアムのメッシュは削除し、Unityの3Dオブジェクトを使って自前のウィケットを作成します。 ウィケットの作成には、シンプルに3つのvertical cylinderをスタンプとして使い、2つのcuboidをベイルとして使います。そして、ウィケットへrigid bodyを設定します。ベイルの大きさはスタンプの中を落ちていってしまわないように小さくしておきましょう。 ウィケットの準備ができたら、スタジアムオブジェクトのhierarchy内に配置し、ピッチの端へ動かしましょう。 これで環境の作成は完了したので、インタラクティブなコンテンツの作成にうつりましょう。まず、VRコントローラーのモデルをボールに変更します。そのためには、Unityでsphereを作成し、”ball”と名付けます。これにrigid bodyを設定し、コントローラーのポジションと回転を取得できるようにします。次に、同じようなボールを作成し真上へ設置し、2つめのボールのmesh rendererを削除しましょう。2つ目のボールを設置するのは、投げるボールの出現位置として使用するためです。

更に詳細な設定を行いたい場合は、こちらのSTYLYチュートリアルを参照してください。

これでコントローラーのモデルが準備できたので、同じ大きさのボールをもう1つ作成しましょう。これが投げるボールとなります。 これですべてのモデルの準備ができたので、次はplaymakerの設定へうつります。まだplaymakerが未インストールの方は、こちらの ガイドを参照してください。Playmakerのセットアップが終わったら、Unityで空のゲームオブジェクトを作成します。最終的に必要なオブジェクトはすべてこの空のオブジェクトの配下へ設定し、prefabを作成してSTYLYへアップロードします。では、編集してウィケットを加えたスタジアムのモデルをさっそく移動しましょう。ここからplaymakerの本領発揮です。 STYLYではスクリプトを使用できないため、playmakerを使って様々な設定をしていきます。Playmakerを使用すれば、コードを1行も書くことなく設定が可能です。まず、また空のオブジェクトを作成し”BallController_R”と名付けます。このオブジェクトは右のコントローラーと関連するステートマシンを持つことになります。そして、FSMで次のアクションを設定していきます。

  • Find Game Object (オブジェクト名::”Controller (right)” 、変数”controller”へ保存)
  • Get Position(ゲームオブジェクト:”controller”、変数”controllerPosition”へ保存)
  • Get Rotation(ゲームオブジェクト:”controller”、変数”controllerRotation”へ保存)
  • Create Object(“controllerPosition”と”controllerRotation”を持ったゲームオブジェクト:”ball” prefab、変数”Ballcontroller”へ保存)
  • Set Parent(“controller”を”Ballcontroller”の親として設定)
  • Get Child(オブジェクト:”Ballcontroller”の子供”spawnPoint”、変数 “spawnpoint”へ保存)
  • Get Child(オブジェクト:” controller “の子供” Model “、変数 ” controllerModel “へ保存)
  • Destroy Object(オブジェクト:”controllerModel”、破壊する)

次に、2つのグローバルイベント”Global_TriggerPressDown_R”と”Global_TriggerPressUp_R”を追加します。これらのイベントはSTYLYエンジンと互換性があります。これらのイベントはボールを投げたトリガーと、一度の投球でボールが1つだけ投げるために使用します。 上の図のように、Waiting for triggerとCreate Ballのステートを追加し、トランジションを設定します。 次に、コントローラーの速度と方向を参照したボールを作成します。そのために、create ballステートで次のアクションを設定します。

  • Get Velocity(オブジェクト:”controller”、変数”ball_Velocity”へ保存)
  • Get Rotation(オブジェクト:”spawnpoint”のEuler Angles、変数”spawnpointRotation”へ保存)
  • Create Object(Spawn point“spawnpoint”とRotation”spawnpointRotation”を持つゲームオブジェクト:ball_game)

ボールを作成する設定はできたので、作成されたボールにコントローラーの速度をわたす必要があります。オブジェクトball_gameに次のFSMを追加します。

  • Get FSM Variable(オブジェクト”ballController_R”、変数”ball_Velocity”へ保存)
  • Set Velocity(Velocityを”ball_Velocity”へ設定)

これでゲームの準備は完了です。Hierarchyからオブジェクトをassetsの中へドラッグアンドドロップしてprefabを作成し、STYLYへprefabをアップロードします。おめでとうございます!完成です!STYLYでゲームが作成できるようになりました!最後にSTYLY Editorを開き、インポートしたモデルを設置し、シーンを公開して友達へ見せましょう!