PlayMakerを使った初めてのゲーム作り⑤ 移動するボールに合わせてカメラを追従させる方法

「PlayMaker」の概要・インストール方法・使い方からPlayMakerを使ってUnityで簡単なゲームを作ってみようシリーズ⑤の記事です。

PlayMakerはUnityで使用するプログラミング言語(C#)を学習しなくても、Unityコンテンツ/VRコンテンツを簡単に制作することができます。

前回と前々回の記事ではPlayMakerを使って玉転がしゲームを完成しました。

本記事では最後に、ボールの動きに合わせてカメラを追従させる方法を紹介します。

これは他のゲームにも応用できるので、ぜひ仕組みを理解して活用してみてください!

完成イメージ

完成イメージ

玉転がしゲームのサンプルシーンはこちらで体験できます。

事前準備

UnityのプラグインであるPlayMakerをインストールしておきましょう。

はじめてPlayMakerを使用するひとは、あらかじめ以下の記事を一読することで、理解を深めることができます。

STYLYの視点(Main Camera)を取得する

カメラを追従させる仕組み作りの前に、まずはSTYLYにアップロードするために必要なSTYLYの視点(Main Camera)をPlayMakerで取得します。

カメラの取得については、こちらの記事でも詳しく紹介しているので、詳しく知りたい方は参考にしてみてください。

空のGameObjectを作成

まずHierarchyのMiniGameの中に、空のGameObjectを作成して、名前を「Camera tracking」に変更します。

GameObjectをMiniGameの中に作成

GameObjectをMiniGameの中に作成

FSMを追加

Camera trackingにFSMを追加します。

Camera trackingにFSMを追加

Camera trackingにFSMを追加

State1の設定

Find Game Objectアクションを追加

State1に「Find Game Object」アクションを追加します。

Object Nameに[VRTK]_VIVEと入力し、Storeには新しく「mainCamera」変数を定義します。

Find Game Objectの設定

Find Game Objectの設定

Game Object Is Nullアクションを追加

「Game Object Is Null」アクションを追加します。

Game Objectに変数mainCameraを選択し、Is Nullには新しく「NextCheckCamera」イベントを設定します。

Game Object is Nullの設定

Game Object is Nullの設定

イベントを追加

State1を右クリックして、Add TransitionからFINISHEDと、NextCheckCameraをイベントに追加します。

State1にイベントを設定

State1にイベントを設定

Game Object Is Nullアクションの設定に戻り、Is Not NullをFINISHEDにします。

Is Not NullにFINISHEDを設定

Is Not NullにFINISHEDを設定

State2の設定

NextCheckCameraから遷移をつなぐ

新しいステートState2を作成し、NextCheckCameraから遷移をつなげます。

State2を作成し遷移をつなげる

State2を作成し遷移をつなげる

Get Main Cameraアクションを追加

State2に「Get Main Camera」アクションを追加します。

Store Game ObjectにmainCameraを設定します。

Get Main Cameraアクションを追加

Get Main Cameraアクションを追加

FINISHEDイベントを追加

State2にFINISHEDイベントを追加します。

State2にFINISHEDイベントを追加

State2にFINISHEDイベントを追加

Trackingステートを作成

新しいステートを作成し、名前を「Tracking」と変更します。

(分かりやすくするためState1とState2の名前もCameraCheck1、CameraCheck2に変更しました。)

CameraCheck1ステートとCameraCheck2ステートのFINISHEDイベントから遷移をつなぎます。

Trackingステートを作成し遷移をつながる

Trackingステートを作成し遷移をつながる

これでSTYLYの視点(Main Camera)を取得するFSMが完成しました。

ボールの動きに合わせてカメラを追従させる

Trackingステートにカメラを追従させる仕組みを作ります。

Get Positonアクションを追加

「Get Positon」アクションを追加します。これはオブジェクトの座標を取得するアクションです。

Game ObjectはSpecify Game Objectに変更し、新しく「Player」変数を定義します。

Vectorには「PlayerPosition」と新しい変数を定義します。

Every Frameにはチェックを入れます。

Get Positonアクションの設定

Get Positonアクションの設定

Vector3 Addアクションを追加

「Vector3 Add」アクションを追加します。これは任意のベクトル成分を変数に加えられます。

Vector3 VariableにPlayerPosition変数を設定します。

Add Vectorには、X:0 Y:2 Z:-2.5と入力します。

Every Frameにチェックを入れます。

Vector3 Addアクションの設定

Vector3 Addアクションの設定

本記事では、このAdd Vectorの数値をX:0 Y:2 Z:-2.5と設定していますが、この数値はボール(動くオブジェクト)とカメラの位置関係を意味しています。

つまり、この数値がカメラの位置を決定します。

理解を深めるためにも、ぜひ一度ご自身で数値を調整することをおすすめします。

Set Positionアクションを追加

「Set Position」アクションを追加します。これでカメラをPlayerPositionの座標に配置します。

Game ObjectはSpecify Game Objectに変更し、mainCamera変数を指定します。

VectorはPlayerPositionを指定し、Every FrameとLate Updateにチェックを入れて、常に更新するようにします。

 

Set Positonアクションの設定

Set Positonアクションの設定

Set Rotationアクションを追加

「Set Rotation」アクションを追加します。これでカメラを少し前に傾けます。

Game ObjectはSpecify Game Objectに変更し、mainCamera変数を指定します。

X Angleに「30」と入力し、Every FrameとLate Updateにチェックを入れます。

Set Rotationアクションの設定

Set Rotationアクションの設定

X Angle「30」という数値もお好みで調整して大丈夫です。

Player変数に追従するオブジェクトを設定

最後にTrackingステートのVariablesタブを開き、初めに作成したPlayer変数を選択します。

Variablesタブを開く

Variablesタブを開く

Player変数のValueに追従させたいオブジェクトを設定します。

今回は玉転がしゲームのボールの動きに合わせて追従させたいので、Hierarchyから「Ball」をドラッグ&ドロップして設定します。

ValueにBallを設定

ValueにBallを設定

以上で動くオブジェクトに合わせてカメラが追従する仕組みは完成です!

STYLYにアップロードする方法

アカウント作成やSTYLYにアップロードする方法を詳しく知りたい方は以下をご覧ください。

STYLYアカウントを作成する

STYLYアカウントをまだ作成していない方はこちら

UnityからSTYLYにプレファブをアップロードする方法

 

完成した玉転がしゲーム「MiniGame」をプレハブ化してSTYLYにアップロードします。

プレハブ化してSTYLYにアップロード

プレハブ化してSTYLYにアップロード

アップロードした後STYLYStudioではこのようになります。

STYLYStudioにアップロード

STYLYStudioにアップロード

おわりに

長く大変だったと思いますが、以上でPlayMakerを使った初めてのゲーム作りシリーズは終了です。お疲れ様でした。

PlayMakerを使うとプログラミング言語(C#)を学習しなくても、Unityコンテンツを作ることができました。

今回はUnityチュートリアルでもある玉転がしゲームを作成しましたが、他にもVRゲームを作成する記事もあるので、ぜひ挑戦してみてください!

 

本シリーズはユニティ・テクノロジーズ・ジャパン合同会社様の【Unity道場 2017】PlayMakerによる初めてのUnityプログラミングのスライド内容を改変して使用しております。