PlayMaker, playMaker,

本記事では、Unity内でPlayMakerを使って主観シューティングゲームを作り、それをSTYLYエディタにエクスポートすることを目的とします。

1〜7まで続いてますので、セットで確認することでより流れが理解できると思います。今回は、Unityで女の子にアニメーション設定をする方法をご紹介します。

 

[8] 女の子の設定

はじめに、Scene Hierarchy内で空のGame Objectを作り、「Enemy」と名前をつけます。

 

次に、上記の画像に示すように、myUnityAssetsフォルダからSapphiArtchanプレハブを探し、それをEnemyオブジェクトにドラッグして子オブジェクトにします。

 

SapphiArtchanを “girl”とし名前をシンプルに変更しましょう。

 

上記の画像で示すように、EnemyオブジェクトのインスペクタウィンドウでCapsule Colliderコンポーネントを追加し、それを編集して女の子の体の周りにうまく収まるようにします。 Edit Colliderボタンをクリックし、ドラッグしながらサイズを変更できます。

また、女の子のオブジェクトにrigid bodyを付与し、物理法則が作用するようにしてください。

さらに、Use GravityとIs Kinematicボックスにチェックしてください。 Is Kinematicの効果により女の子はオブジェクト(たとえば銃弾)と衝突します。しかし、ゲーム内で重力以外のforceの影響を受けません。

 

次に、Sapphi Art Chan_Anim C#スクリプトの横にある小さな歯車のアイコンをクリックし、Remove Componentをクリックします。 C#スクリプトはSTYLYと互換性がないので、これを削除する必要があります。

 

女の子がステージ上の正しい高さに表示されるように、女の子のY値を-1に設定してください。

 

Enemyオブジェクト内に開始のSetupステートを持った新しいFSMを作成します。メインカメラをmainCameraというゲームオブジェクトとして取得・格納し、Child Nameで「girl」を見つけて同じ名前の変数に格納します。

(後でメインカメラと女の子の両方をFSMで参照する必要があるので、変数としてここに格納するのが非常に便利です。)

 

次に、「Chasing Player」という新しいステートを作成し、それをSetupステートのFINISHED遷移に接続します。 その後、reachedPlayerという新しいイベントを作成し、それをChasing Playerに追加します。

 

下の図のように、Chasing PlayerステートにSmooth Look Atアクションとmove Towardsアクションを追加します。

 

Smooth Look Atアクションにより女の子がメインカメラ、すなわちVR空間のプレイヤーの方向に向きます。Move Towardsアクションはプレイヤーに向かって女の子を動かすもので、このゲームの鍵となります。Finish Distanceを5に設定すると、女の子はプレーヤーから適当な距離で止まり、この移動アクションが完了すると、reachedPlayerイベントがトリガーされます。

 

reachedPlayerがトリガーされる時に、Reached Playerと呼ばれる分岐に遷移させる必要があります。

Reached Playerステートを作成し、reachedPlayer遷移につなげます。このReachedPlayerステート内に、敵(Use Owner)とmainCamera変数(プレイヤーの現在の位置)間を計算させるGet Distanceアクションを追加します。これを全てのフレームで行わせます。その後、距離が1.5よりも大きい(Float 1がFloart 2よりも大きいのが条件)場合にchasePlayer遷移が起こるFloat Compareアクションを追加します。これにより、プレイヤーが舞台上の別の場所にテレポートして敵から1.5以上の距離になると、再びプレイヤーを追い続けることになります。この際、chasePlayer遷移をChasing Playerステートにつなげ直すことを忘れないでください。

 

次に、Chasing Playerステートに戻ってTrigger Eventアクションを追加します。これはトリガーで衝突を検知するアクションです。

敵を作った時に、シーン内で他のcolliderと接触させるために敵にcapsule colliderを付け加えました。この場合、私たちが求めているcolliderはトリガーでもあり、弾丸内のクマモデルでもあります。

 

このクマはシーン内で唯一のトリガーで、トリガーイベントが起こるたびに敵とプレイヤーの銃弾の間で衝突を起こします。On Trigger Stayをトリガーのタイプとして選択し、銃弾と敵がある時間重なり合う時に衝突と判定させます。これは初めて銃弾と敵が衝突した時に自動的にトリガーされますが、近距離で敵に取り囲まれて敵と近すぎる距離でプレイヤーが銃を撃った場合も、敵にhitしたと数えられます。後者は、collision stayではなくcollision entryを検出した場合には発生しないため、On Trigger Stayが今回使用したい設定となります。

これでTrigger Eventが敵のdeadステートに遷移させるために使う「die」イベントに送られようにします。つまり、「Dead」ステートを作り、「die」からこのステートに遷移を加えます。

 

 

Reached Playerステートにまったく同じ設定で同一のTrigger Eventアクションを追加します。これはこのステートでプレイヤーが敵を撃ってしまう可能性があるためです。また、このステートからも「die」遷移イベントをDeadステートに加えます。

 

Deadステートをクリックし、enemyCounterを見つけて、同じ名前の変数に格納するためにFind Game Objectアクションを追加します。その後、Send EventをsubtractEnemyにし、Send EventアクションをenemyCounter変数上で実行します。これはプロジェクト内で前もって作成していたグローバルイベントです。

これらの2つのアクションを組み合わせると、画面上の敵の数を常に監視するenemyCounterオブジェクトが置かれ、敵が一体死んだ場合、敵の総数から一つ減らすためのメッセージが送られます。

 

Destroy Componentアクションを付け加え、UnityEngineのドロップダウメニューからUse Owner’s Capsule Colliderを選択します。capsule colliderを取り外すことにより、プレイヤーが敵のキャラクターモデルに近い距離で撃った銃弾を敵の体が妨げないようにします。

 

最後に、Deadステートに10秒待機させるWaitアクションを追加し、destroySelfというイベントを送信させます。その際、Real Timeボックスをチェックします。この遷移をDestroying Selfという新しいステートに接続します。

 

Destroying Selfステート内にDestroy Selfアクションを一つ作り、Detach Childrenを選択解除にします。これは子要素を敵に付与したままゲームから無くさせるためです。

 

今度は、敵オブジェクトのプレハブを作成します。 まず、敵のオブジェクトをシーン階層から直接myPrefabsフォルダにドラッグします。 次に、下の画像に示すように、元のゲームオブジェクトをシーン階層から削除します。

それでは敵オブジェクトをプレハブにしていきましょう。はじめに、EnemyオブジェクトをScene Hierarchyから直接myPrefabsフォルダにドラッグします。次に、下図のようにScene Hierarchyから元々のゲームオブジェクトを削除します。

 

enemySpawnerオブジェクトを選択肢、FSM内のSpawning Enemyステートに進みます。赤いエラーアイコンがついているCreate Objectアクションの中から、新しく作成したEnemyプレハブをGame Objectフィールドにドラッグし、警告を消してspawnerのFSMを完成させます。

 

PlayMakerではユーザーはプレハブのFSMを直接編集できます。もしEnemyプレハブをもう一度編集する必要があれば、それをmyPrefabsフォルダの中から選択し、FSMの編集でやってきた通りに行うことができます。

 

敵の女の子に関するロジックが出来上がったら女の子にアニメーションを付けていきましょう。

Enemyである女の子のオブジェクトをScene Hierarchyから選択し、ドロップダウンメニューからWindow > Animatorとクリックし、女の子のアニメーションコントローラを表示させます。

チュートリアルで使ってきたSapphiArthcanモデルには様々なアニメーションがついてきており、アニメーションを加えるには欲しいアニメーションを選択し細かい修正を行うだけです。

 

 

編集の初めはidleからrunningにつながっている遷移矢印を0に設定することです。二つの矢印をそれ添え選択し、Inspectorウィンドウ内のHas Exit Time boxのチェックを外します。

 

これをrunning、hit01、KO_bigアニメーションにも繰り返します。後ほど全てゲームで使うことになります。

 

このアニメーションシステムにおいてステート間の遷移はブーリアン型(つまり真理値)の変更で動きます。例えば、idleステートになっており、runningにつながる遷移の値をtrueに設定すると、キャラクターモデルが走っているアニメーションに変わります。(尚、これはこのアニメーションコントローラをplayMakerで使用するために必要な詳細ですので、このチュートリアルではアニメーションについて詳しく説明しません。)

 

EnemyプレハブのFSM内のChasing Playerステートに戻ります。2つSet Animator Boolアクションを作ります。一つはparam_idletohit01toをfalseにし(ボックスのチェックを外す)、二つめはparam_idletorunningをtrueにします(ボックスにチェックを入れる)。

 

これにより、もし敵がプレイヤーを攻撃中の場合、敵が攻撃するのを止め、走行へと切り替わります。このステートにSetupステートもしくはReached Playerステートからリーチできるためここで最初のパラメーターをfalseに設定する必要があります。これらは敵がプレイヤーに攻撃するものであり、追いかけるステートの際にはもう必要のないアニメーションです。

 

 

EnemyプレハブのFSM内のReached Playerステートに進み、Set Animator Boolアクションを作ります。最初のはparam_idletorunningをfalseに設定し、二つ目はparam_idletohit01をtrueに設定します。これはrunnnigアニメーションを止め、敵がプレイヤーに到達すると攻撃(キック)し始めるようにします。

 

Deadステートに進み、hitアニメーション、runアニメーションをfalse、KOアニメーション、param_idletoko_bigをtrueに設定します。これで他の全てのアニメーションは止まり、敵は床に倒れこむKOステートに入ります。

 

敵のプレハブはこれで終わり、次はゲームの音楽を作っていきましょう。

[関連記事]
PlayMakerの利用 -1-
PlayMakerの利用 -2-
PlayMakerの利用 -3-
PlayMakerの利用 -4-
PlayMakerの利用 -6-
PlayMakerの利用 -7-

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Miyuki Yasuzawa

デジタルハリウッド東京本校卒業後、今はフリーランスデザイナーです。主に動画制作、プロジェクションマッピング制作などをしていて、HP制作や英訳もたまにやります。宇宙と読書が好きです。

Share this article

Shares
Facebook Twitter Google+ Pinterest hatebu

About STYLY

STYLYは、VR空間を駆使した新たな表現・体験を生み出せるクリエイティブプラットフォームです。 STYLYを活用することで、コンセプチュアルなショップ空間やインスタレーション、ギャラリーなど クリエイターのイマジネーションを際限なく表現した多彩な空間を構築できます。 またその空間を通じて、今までの現実では成し得なかった体験をインターネットの世界へシェアすることができます。
 

Unity

Unityで制作されたコンテンツをお持ちの方へ
Unityシーンアップロード機能を活用すれば簡単にVR化が可能に!

Click here

×