STYLYとUnityのPlayMakerで無双VRを作る Vol.1 -アニメーションとランダム生成-

この記事ではUnityのPlayMakerを使ってSTYLY上で無双的なゲームを作る方法を紹介します。

敵キャラクターをランダムに配置してプレイヤーに向かってくるようにします。 武器に触れたら消えるようにして、たくさん出てくる敵キャラクターをどんどん倒せる爽快ゲーム を作ってみましょう。

 

完成シーン

完成シーン

 

サンプル

STYLY GALLERYからサンプル空間を体験できます。

 

記事で紹介しているUnityプロジェクトのダウンロードはこちらからできます。

サンプルプロジェクト  

使用するアセット

この記事ではPlayMakerを使用します。

 

 

Playmakerを使用します

PlayMakerを使用します

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

 

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の追加

Animator Controllerの追加

  先程作ったAnimatior Controller(Nakagawa.control) をAnimatorコンポーネントのControllerに指定します。

Apply Root Motionにはチェックを入れておきます。

Controllerの指定

Controllerの指定

 

Animatorの設定

Window → AnimatorからAnimatorウィンドゥを開きます。

右クリックからCreate State  → Emptyで空のステートを作成します。

Stateの追加

Stateの追加

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

New Stateを選択

New Stateを選択

 Motionのところに使用したいモーションを指定します。

ここではMove Motion Free Packに入っている”Basic_Walk_01″にします。

Motionを指定する

Motionを指定する

再生させてうまくモーションが渡せているか確認します。

ちゃんと歩くモーションをしてくれました。

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の追加

Rigidbodyの追加

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

プレハブにする

プレハブにする

 

Actionを追加する

PlayMakerでアクションを追加していきます。
先ほど作った剣をコントローラーに取り付けます。

コントローラーにオブジェクトを取り付ける方法に関しては、以下の記事を参照します。

最初にFind Game Objectを使ってVRコントローラを取得します。 剣をここで取得したコントローラの子要素にして使用するためです。

Object Nameには”Controller (right)”と入力します。 

Controllerと(right)の間に半角スペースがあるので 気を付けてください。

StoreにはNew Variableから”Controller”という新しい変数を作成しここに格納します。

Find Game objectの追加

Find Game objectの追加

  Create Objectを追加してオブジェクトを生成します。

Game Objectにはプレハブの”Sword”を指定します。

Store ObjectにはNew Variableから”Sword”という変数を作りここに格納します。

Create Objectの追加

Create Objectの追加

  Set Parentを追加してコントローラと剣を親子関係にします。

Game ObjectにはSword、ParentにはControllerをそれぞれ指定します。

Reset Local PositionとReset Local Rotationにはチェックを入れておきます。

Set Parentの追加

Set Parentの追加

これでコントローラと剣の設定ができました。  

Transitionを追加してステートが遷移するようにします。

State1を右クリックしてAdd transitionからFINISHEDを選択します。

Transitionの追加

Transitionの追加

右クリックからAdd Stateで新規にState2を作ります。

State1のFINISHEDからStae2をドラッグしてつなぎます。

Stateを追加

Stateを追加

これでState2に遷移できるようになりました。  

キャラクター生成

State2の名前を”Character Generation”にしてこのステートでキャラクターの生成を行います。

Stateの名前を変更

Stateの名前を変更

 

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

Create Objectの追加

Create Objectの追加

  キャラクターを生成する位置を決めるためにX,Zの値を作ります。

毎回違う場所に生成させたいのでRandom Floatを使います。

MinとMaxをそれぞれ-10,10として-10から10の間の値を取得します。

Store ResultにはNew VariableからXとZを作りそこに格納します。

Random Floatの追加

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の追加

Set Vector3 XYZの追加

  変数NakgawaPosをCreate ObjectのPositionに指定します。

これでランダムな位置に生成する準備が出来ました。

Positionの変数を指定

Positionの変数を指定

  Character GenerationのTrtansitionをFINISHEDを追加します 新規にステートを作成し、名前を”Random Wait”とします。

Character GenerationからRandom Waitをつなぎます。

Random WaitはMinに1、Max3として1秒から3秒までのランダム値を取得してその間キャラクターが生成するタイミング を変化させます。

Real Timeにはチェックを入れておきます。

Random Waitの追加

Random Waitの追加

ランダムな待機所間が終わったらまたCharacter Generationに戻ってキャラクターを生成させます。

Random WaitにFINISHEDのTransitionを追加してCharacter Generationにつなぎます。

Character Generationに戻す

Character Generationに戻す

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

再生した結果

再生した結果

  UnityからSTYLYにアセットをアップロードする方法 記事を読む    

この記事ではUnityで別アセットのアニメーションの受け渡し方とPlayMakerでランダムな位置に キャラクターを生成させる方法を紹介しました。

ゲーム性があるのものはランダムな要素が必要な場面が多く出てきますよね。

またキャラクターにはモーションが必須ですが、自分でいくつものモーションを作成するのは大変です。

そんな時にもUnityのAssetStoreにあるモーションを自作のキャラに適用できるので非常に便利です。

次の記事では迫ってくる敵キャラクターを剣で倒す方法を紹介していきます。

記事で使用した3Dモデルは、サンプルプロジェクト内にあります。

3Dモデルの使用は、STYLY内で限りご使用いただけます。

STYLY内で使用していただけるのであれば、改造や改変に制限はありません。