第3回:BGMや速度変更!

今回は、BGMやプレイヤー関係の初期設定など「細かいけれど重要な部分」をやっていきます。音楽が鳴り、プレイヤーが速く動いたり高くジャンプしたりできるワールドを作っていきましょう。

ロジックも少しだけ出てきますよ!

サンプルプロジェクト

今回の作例は「cue_03」です。段々複雑になってきましたね。
On Join Player TriggerPlayer Logic→ギミック……という複雑なパターンもでてきます。
今回の記事を読んでも上手くいかなかった方は、サンプルプロジェクトと見比べて、どこが違っているかをチェックしましょう!

プレイヤーのスピードやBGM演奏

プレイヤーのスピード変更やBGM演奏は、どのワールドでもつけたい処理だと思います。しっかり覚えておきましょう。今回のゴールは↓のようなイメージをしておいてください。

ヒエラルキーでは、下の画像のような構造を作ります。

それでは実際につくっていきます。
まずEmptyObjectを作り、【Audio】という名前に。その子にまたEmptyObjectを作り、【MainBGM】という名前にしてください。

【MainBGM】にはPlay Audio Source Gimmickを付け、上の画像のように設定しましょう。Keyは「PlayMainBGM」。
(今回はParameterTypeをSignalではなくBoolにしています。これは将来的にBGMのON/OFFをやりやすくするためです)

そしてTargetがLocalPlayerなのが重要です。ワールド全体に同じ曲を流すのではなく、プレイヤーごとにBGMを変えられるようにしてあるのです。

ポイント
こうしておくと、「誰かがクリアしたとき、そのクリアした人だけBGMを変える」ことなどもできるようになります。

使っているのは「Shooter」ワールドの名曲

Audio Sourceには、テンプレートフォルダのShooter/AudiosからBgmというファイルを指定してください。

続けて別のEmptyObjectを作り、【PlayerManagers】とします。その子にさらにEmptyObjectをつけ、【PlayerInitManager】という名前にします。

先ほどの画像をもう一度貼ります。このような構造ができているでしょうか?

VehicleのBGMなどもかっこいいです。BGMはお好みで選びましょう!

初期化処理を作っていく

では、【PlayerInitManager】に

Set Move Speed Rate Player Gimmick移動速度を変える
Set Jump Height Rate Player Gimmickジャンプ力を変える
On Join Player Triggerプレイヤー入室時のトリガー
Player Logicプレイヤー関係のロジック

をつけます(*1)。

ついにトリガー・ギミックに加えてロジックが入ってきましたね! 

基本はこのように、トリガー・ギミックの間に挟んで使うものです。数字の計算や条件チェックなどもできます。Unity経験者の方にはぜひ使いこなして欲しい機能です。

とはいえ今回出てくるのはまだ非常に単純な、数値を送るだけのロジック。基礎の確認にとどめましょう。

まずはOn Join Player Triggerを、画像のような感じに設定します。
(ギミック2つのほうは特にいじる必要ナシです)

このトリガーは、プレイヤーがワールドに入ったときに発動するもの。TargetがGlobalだと誰が入ってきても反応しますが、TargetがPlayerなら「ワールドにちょうど今入ってきた人」にだけ反応します。つまり初期化に使えます。
(これまでのトリガー・ギミックのメッセージはItemに送るものばかりでしたが、PlayerをTargetにしているのは大きな違いです!)

また、さっき作った【MainBGM】に送る「PlayMainBGM」メッセージは、ParameterTypeがSignalではなくBool(ON)になっていますね。Play Audio Source GimmickはBoolで発動するように設定すれば「ON:再生 OFF:停止」を使い分けることができます!
第二回の記事で「的を非表示にする」ところで出てきたのと似たような仕組みですね。

(*1) PlayerやGlobalに関係するトリガー/ギミック/ロジックなどは、Itemと違ってどこに付けても構いません。とはいえ分かりやすいように整理しておくと良いでしょう。
(今回はEmptyObjectを作って【PlayerManagers】や【Audio】といった名前をつけて整理しています)

ロジックの登場!

さていよいよPlayer Logicの登場です。さっき作ったOn Join Player Triggerでは「OnJoinPlayer」というメッセージを「ワールドにいま入ってきたプレイヤーに」送るように設定しましたね。

これを受けて、Player Logicが反応します(LogicはSignalで発動します)。
このLogicで、Playerの「moveSpeed」、「jumpHeight」にInteger(整数)の「2」を送っているわけです。

画像を見れば分かるように、Integer(整数)を指定するのは左側と右側で2箇所あるので注意しておいてください!

ポイント
右側の指定をミスしてSignalにすると、非常に大きな数字が入ってしまいます。このケースだと移動速度が異常に速くなり、ちょっと移動しただけで表示がおかしくなることまで……

また、Constantという指定も大事です。これは定数(ただの数字)という意味。つまり「ただの数字の2」をメッセージで送りたいという意味になります(*2)。

Set Move Speed Rate Player GimmickSet Jump Height Rate Player Gimmickは最初から「moveSpeed」「jumpHeight」というKeyに反応するように設定されています。なので、移動速度もジャンプ力も2倍になります!

PlayerInitManagerの全体像は、こうなります。

これを再生してみると……BGMが鳴り、プレイヤーの移動速度が速くジャンプが高くなっていますね!

(*2) RoomStateを指定すると変数ということになります! Constant指定忘れはやりやすいミスなので注意。C#で「int 2;」とか書いちゃったようなものです……

第4回:HPのある敵をロジックでつくる

第4回ではこれまで的としてつくったものを3回弾を当てると倒せる敵にするなどして、よりゲーム性を高めていきます。そのために必要な「ロジック」について詳しく解説しています。

Itemについて整理

少し細かい話ですが、Itemについて整理しておきましょう。
まずItemコンポーネントはCCKが関係するオブジェクトのかなり多くに、管理のため付けられるものです。トリガーやギミックをつければ、基本自動的に付きます(*3)。

Itemの派生コンポーネントも、自動で付くものが多いです。例えば第1回でAdd Instant Force Item GimmickをCubeにつけたとき、自動でMovable Itemというのが付いたことに気づいた方もいると思います。Itemに「動いて、位置も同期する」属性を加える派生コンポーネントですね。

ほか、Item派生コンポーネントには、

Movable Item動くアイテム。自動でRigidbodyがつく。物理法則によって動かしたくないときはRigidbodyのUseGravityをOFFに、IsKinematicをONにするとよい。
Character Item物理法則に必ずしも従わず、地形に沿って移動できるアイテム。Movable Itemと両方つけることはできない。
Grabbable Itemつかめるアイテム。Movable Itemと併用。
Ridable Item乗れるアイテム、乗り物。つけるだけでイスになり、Movable ItemCharacter Itemと合わせれば動かすこともできる。

といったものがあります。

なお、Warp Item Gimmickというアイテムをワープさせるギミックは、付ける前にMovable ItemCharacter Itemのどちらかを付ける必要ありです(*4)。

ポイント
Movable Item/Character Itemより先にWarp Item Gimmick付けようとしても、エラーが出ます。

Ridable Itemをつけて腰の位置をSeatで指定するだけでイスにできます!

(*3) Player LogicとかGlobal LogicのようにItem単位で管理されていないモノ、Play Audio Source GimmickSet Text GimmickなどItemそのものに付けなくてOKなモノ……など例外もあります。
(*4) Warp Item GimmickMovable ItemCharacter Itemどちらか1つが必要なのです。どちらを使うのか先に決めてほしい、ということでしょうね。