この記事ではUnityのPlayMakerを使ってSTYLY上で無双的なゲームを作る方法を紹介します。
敵キャラクターをランダムに配置してプレイヤーに向かってくるようにします。 武器に触れたら消えるようにして、たくさん出てくる敵キャラクターをどんどん倒せる爽快ゲーム を作ってみましょう。

完成シーン
サンプル
STYLY GALLERYからサンプル空間を体験できます。
記事で紹介しているUnityプロジェクトのダウンロードはこちらからできます。
使用するアセット
この記事ではPlayMakerを使用します。

PlayMakerを使用します
キャラクターのモーションはMove Motion Free Packのモーションを使用します。

Move Motion Free Pack
キャラクターの設定
リグの設定
ボーンとウェイト調整された人型キャラクターをUnityでインポートします。
インスペクタのRigのAnimation TypeをHumanoidにします。 Avatar DifinitionはCreate From This Modelにしておくと自動的にAnimatorコンポーネントが 追加されます。
キャラクターの名前は”Nakagawa”としました。

リグの設定
Animator Controllerを追加する
アニメーションを制御するためにAnimator Controllerを追加します。
CreateからAnimator Controllerを選択し、名前はここでは”Nakagawa”としました。

Animator Controllerの追加
先程作ったAnimatior Controller(Nakagawa.control) をAnimatorコンポーネントのControllerに指定します。
Apply Root Motionにはチェックを入れておきます。

Controllerの指定
Animatorの設定
Window → AnimatorからAnimatorウィンドゥを開きます。
右クリックからCreate State → Emptyで空のステートを作成します。

Stateの追加
作成したNew Stateを選択します。

New Stateを選択
Motionのところに使用したいモーションを指定します。
ここではMove Motion Free Packに入っている”Basic_Walk_01″にします。

Motionを指定する
再生させてうまくモーションが渡せているか確認します。
ちゃんと歩くモーションをしてくれました。

Motionが適用された
PlayMakerの設定
Stateを追加する
モーションが設定されたキャラクターをプレハブ化します。
“Prefabs”というフォルダを作ってそこにドラッグします。

プレハブにする
新たに空のオブジェクトを作りそこにPlayMakerのステートを追加していきます。
GameObjectからCreate Emptyで空のオブジェクトを作り名前を”STYLYmusou”とします。
それもPrefabsフォルダに入れてプレハブ化します。

空のオブジェクトを作ってプレハブにする
PrefabsフォルダのSTYLYmusouを選択してからPlayMaker ウィンドウ上で右クリックからAdd FSMを選択します。
これでステートが作成されました。 FMSが追加されたプレハブをヒエラルキー上で選択してPlayMakerで編集しようとすると”Editing of Prefab Instance is disabled. See preferences”と出てきます。
その場合は”Edit Prefab”を選択してください。 ここではすべてプレハブを編集していくことになります。
剣を作る
敵を倒すための剣をUnityで作っておきます。
ここではシンプルにCubeを縦長にしただけのものを用意しました。
剣のような武器はAsset Storeにたくさんあるのでそれらを使うのも良いですね。
当たり判定を取得するためにRigidbodyを追加してIs Kinematicにチェックを入れます。
Use Gravityのチェックは外します。

Rigidbodyの追加
作った剣を”Sword”という名前にしてプレハブ化します。

プレハブにする
Actionを追加する
PlayMakerでアクションを追加していきます。
先ほど作った剣をコントローラーに取り付けます。
コントローラーにオブジェクトを取り付ける方法に関しては、以下の記事を参照します。
最初にFind Game Objectを使ってVRコントローラを取得します。 剣をここで取得したコントローラの子要素にして使用するためです。
Object Nameには”Controller (right)”と入力します。
Controllerと(right)の間に半角スペースがあるので 気を付けてください。
StoreにはNew Variableから”Controller”という新しい変数を作成しここに格納します。

Find Game objectの追加
Create Objectを追加してオブジェクトを生成します。
Game Objectにはプレハブの”Sword”を指定します。
Store ObjectにはNew Variableから”Sword”という変数を作りここに格納します。

Create Objectの追加
Set Parentを追加してコントローラと剣を親子関係にします。
Game ObjectにはSword、ParentにはControllerをそれぞれ指定します。
Reset Local PositionとReset Local Rotationにはチェックを入れておきます。

Set Parentの追加
これでコントローラと剣の設定ができました。
Transitionを追加してステートが遷移するようにします。
State1を右クリックしてAdd transitionからFINISHEDを選択します。

Transitionの追加
右クリックからAdd Stateで新規にState2を作ります。
State1のFINISHEDからStae2をドラッグしてつなぎます。

Stateを追加
これでState2に遷移できるようになりました。
キャラクター生成
State2の名前を”Character Generation”にしてこのステートでキャラクターの生成を行います。

Stateの名前を変更
Create Objectを追加します。 Game ObjectにはプレハブのNakagawaを指定します。

Create Objectの追加
キャラクターを生成する位置を決めるためにX,Zの値を作ります。
毎回違う場所に生成させたいのでRandom Floatを使います。
MinとMaxをそれぞれ-10,10として-10から10の間の値を取得します。
Store ResultにはNew VariableからXとZを作りそこに格納します。

Random Floatの追加
これで毎回ランダムなXの値とZの値を取得できるようになりました。
XとYの値を一緒に格納するためにSet Vector3 XYZを使用します。
Vector3 VariableにはNew Variableから新規で”NakagawaPos”を作成しここに格納します。
XにはRandom FloatからのXをZにはRandom FloatからのZをそれぞれ指定します。

Set Vector3 XYZの追加
変数NakgawaPosをCreate ObjectのPositionに指定します。
これでランダムな位置に生成する準備が出来ました。

Positionの変数を指定
Character GenerationのTrtansitionをFINISHEDを追加します 新規にステートを作成し、名前を”Random Wait”とします。
Character GenerationからRandom Waitをつなぎます。
Random WaitはMinに1、Max3として1秒から3秒までのランダム値を取得してその間キャラクターが生成するタイミング を変化させます。
Real Timeにはチェックを入れておきます。

Random Waitの追加
ランダムな待機所間が終わったらまたCharacter Generationに戻ってキャラクターを生成させます。
Random WaitにFINISHEDのTransitionを追加してCharacter Generationにつなぎます。

Character Generationに戻す
Unity上で再生してみるとランダムな位置にキャラクターが生成されていることが確認できます。

再生した結果
UnityからSTYLYにアセットをアップロードする方法 記事を読む
この記事ではUnityで別アセットのアニメーションの受け渡し方とPlayMakerでランダムな位置に キャラクターを生成させる方法を紹介しました。
ゲーム性があるのものはランダムな要素が必要な場面が多く出てきますよね。
またキャラクターにはモーションが必須ですが、自分でいくつものモーションを作成するのは大変です。
そんな時にもUnityのAssetStoreにあるモーションを自作のキャラに適用できるので非常に便利です。
次の記事では迫ってくる敵キャラクターを剣で倒す方法を紹介していきます。
記事で使用した3Dモデルは、サンプルプロジェクト内にあります。
3Dモデルの使用は、STYLY内で限りご使用いただけます。
STYLY内で使用していただけるのであれば、改造や改変に制限はありません。