TopDown Engine 入門 Part 14 ~効果音編~

【フィードバック】

キャラクターがジャンプした時の効果音、魔法を放った時のエフェクト、ダメージを受けた時の画面の振動――こういったゲーム中で何かが起こった時に再生する演出のことを、TopDown Engine では【フィードバック】と呼んでいます。

今回は基本的なフィードバックとして、プレイヤーキャラクターがジャンプした時に、効果音が鳴るようにしてみます。

MMFeedbacks

まず、キャラクターの子に JumpStartFeedback という名称で GameObject を生成し、Add Component から MMFeedbacks をアタッチします。

f:id:Gigacee:20200729185353p:plain

Inspector の「Add new feedback...」をクリックすると、Audio を始めとした様々なフィードバックのリストが出てきます。今回はその中の、Audio > Sound を選択します。すると、「Sound」というバーが「Feedbacks」に追加されます。

f:id:Gigacee:20200729185407p:plain

バーをクリックして展開すると、とても長い設定項目が出てきます。その中頃にある「Sound」グループの「Sfx」に、任意のオーディオクリップを設定してください。

f:id:Gigacee:20200729185401p:plain

最後に、親の Character Jump 2D 内にある「Jump Start Feedback」に、作成した JumpStartFeedback を設定します。

f:id:Gigacee:20200729185344p:plain

これで手順は完了です。シーンを再生し、ジャンプ時に効果音が鳴るかどうか確かめてください。


PREVTopDown Engine 入門 Part 13 ~アニメーション編~


TopDown Engine 入門 Part 13 ~アニメーション編~

キャラクターがジャンプできるようにする

今回は、キャラクターの基本的なアニメーションの一つ、ジャンプを作っていきます。

Part 3 で実行した「AutoBuild Player Character 2D」により、すでにキャラクターに Character Jump 2D がアタッチされているので、あとはアニメーションを作るだけでジャンプできるようになります。

f:id:Gigacee:20200719163037p:plain

アニメーション作成手順

アニメーションの作り方には何ら特別なことはなく、普通に Unity 標準の Animator で作れば OK です。以下の手順に従ってください。

  • キャラクターの View に Animator をアタッチする。
  • Animator Controller を新規作成し、「Controller」に設定する。
  • 親の Character コンポーネントの「Character Animator」に、View を設定する。

f:id:Gigacee:20200719163021p:plain

  • 「Idle」と「Jumping」という名称で Animation を作成する。
    • この名称は必須ではないので、「Player@Idle」など適宜自分の判りやすい名称にして構いません。
  • 「Idle」を Default State にする。
  • 「Jumping」のアニメーションを作成する。
    • 画像では単に Y 座標を変化させているだけですが、スプライトシートや 2D Animation(Unity 標準のスケルタルアニメーション)を用いて作成することももちろん可能です。

f:id:Gigacee:20200719163214p:plain

  • パラメーターに「Jumping」という名称で bool 値を追加し、「Any State」からの遷移条件に設定する。

f:id:Gigacee:20200719163009p:plain

  • 「Enter」と「Jumping」から「Idle」へ遷移できるようにする。
  • 各遷移の設定を、必要に応じて調整する。

f:id:Gigacee:20200719163045p:plain

動作確認

これで、キャラクターがジャンプできるようになりました。シーンを再生し、スペースキーでキャラクターをジャンプさせられるかどうか試してみてください。


NEXTTopDown Engine 入門 Part 14 ~効果音編~

PREVTopDown Engine 入門 Part 12 ~ダイアログ編~


TopDown Engine + Rewired で NPC に話しかけたり扉を開けたりができない問題

「Interact」アクション

TopDown Engine に Rewired を導入したところ、移動やジャンプはできるのに、話しかけたり扉を開けたりといった操作ができないという問題が発生しました。

f:id:Gigacee:20200716093830p:plain
この状態で A ボタンを押しても何も起こらない

コードを見てみると、話しかけるや扉を開けるといった操作は「Interact」ボタンを使用するようですが、Rewired の設定を見ると「Interact」ボタンが存在していません。

f:id:Gigacee:20200716093844p:plain
コード中の「Interact」ボタンについて書かれている箇所

f:id:Gigacee:20200716094313p:plain
Rewired の設定には「Interact」が無い

なので、新規で「Interact」アクションを追加し、任意のボタンを割り当てることで、正しく動作するようになります。

f:id:Gigacee:20200716094345p:plain
Interact アクションを追加

f:id:Gigacee:20200716094441p:plain
任意のボタンに Interact アクションを割り当て

Esc キーに Pause を割り当てる

また、初期状態ではキーボードに Pause がアサインされていないので、これも設定します。Rewired Editor を開いて、以下の手順で設定することができます。

  1. 上部メニューから「Keyboard Maps」をクリックする。
  2. 左下の「Layout」の中から「Player1」を選択する。
  3. 「Element」下部のメニューから「New」をクリックする。新しい Element が生成される。
  4. 生成された Element が選択されている状態で、右上の「Key」の中から「ESC」を選択する。
  5. 右下の「Action」の中から「Pause」を選択する。

f:id:Gigacee:20200719122548p:plain

これで、ESC キーに Pause を割り当てることができました。

補遺

なお、Corgi Engine も同様の手順でボタンのアクションを設定することができます。

TopDown Engine 入門 Part 12 ~ダイアログ編~

ダイアログ(会話テキスト)を表示させる

TopDown Engine には、シンプルなダイアログシステムが備わっています。今回はこれを利用して、NPC に話しかけるとメッセージが表示されるようにしてみましょう。

ダイアログゾーン

キャラクターに話しかけられるようにするには、そのキャラクターに【ダイアログゾーン】を設定する必要があります。キャラクターの子に空の GameObject を作成して「DialogueZone」とリネームし、Add Component から Box Collider 2D と Dialogue Zone をアタッチしましょう。Box Collider 2D は、「Is Triggger」にチェックを入れておきます。

f:id:Gigacee:20200714215221p:plain

この Box Collider 2D が、ダイアログゾーンの範囲になります。Offset や Size を適宜調整してください。また、Dialogue Zone の一番下の「Dialogue Line」に、話す内容となるメッセージを入力しておきます。

f:id:Gigacee:20200714215230p:plain

これで最低限の設定ができました。シーンを再生し、NPC の近くで決定ボタン(デフォルトではスペースキー)を押し、メッセージが表示されるかどうか確かめてください。位置や大きさは、「Prompt Relative Position」「Offset」の数値を調整したり、「Button Prompt Prefab」「Dialogue Box Prefab」に設定されている Prefab の Scale を調整してください。

f:id:Gigacee:20200714215242p:plain


NEXTTopDown Engine 入門 Part 13 ~アニメーション編~

PREVTopDown Engine 入門 Part 11 ~ルーム編~


TopDown Engine のキャラクターを、アナログスティックと十字キーの両方で動かせるようにする

CharacterMovement の代わりに、以下のスクリプトをアタッチします。

using System;
using MoreMountains.TopDownEngine;
using UnityEngine;

public class CharacterMovementCustom : CharacterMovement
{
    float secondaryHorizontalInput;
    float secondaryVerticalInput;

    protected override void InternalHandleInput()
    {
        base.InternalHandleInput();

        secondaryHorizontalInput = _inputManager.SecondaryMovement.x;
        secondaryVerticalInput = _inputManager.SecondaryMovement.y;
    }

    protected override void HandleInput()
    {
        if (InputAuthorized)
        {
            _horizontalMovement = Math.Abs(secondaryHorizontalInput) > Mathf.Epsilon
                ? secondaryHorizontalInput
                : _horizontalInput;

            _verticalMovement = Math.Abs(secondaryVerticalInput) > Mathf.Epsilon
                ? secondaryVerticalInput
                : _verticalInput;
        }
        else
        {
            _horizontalMovement = 0f;
            _verticalMovement = 0f;
        }
    }

    public override void ResetInput()
    {
        base.ResetInput();

        secondaryHorizontalInput = 0f;
        secondaryVerticalInput = 0f;
    }
}

TopDown Engine で、Composite Collider 2D の Hole に入っても落ちれない問題

TopDown Engine では、CharacterFallDownHoles2D コンポーネントを持ったキャラクターが「Hole」レイヤーに設定されたコライダーを通ると落ちることができるのですが、Hole のコライダーが Tilemap Collider 2D + Composite Collider 2D だった場合、初期状態では落ちることができません。

デモを見ると、Tilemap で作られた Hole があるものの、よく見ると「Used By Composite」にチェックが入っていません。

f:id:Gigacee:20200706211224p:plain

デモのように Composite Collider 2D を使わないようにすれば落ちれますが、パフォーマンス的にはあまり良くないので、どうしたものか……と考えていたのですが、「Geometry Type」を「Polygons」にしたら落ちれるようになりました。

f:id:Gigacee:20200706211801p:plain

原因

キャラクターが Hole に入っているかどうかはPhysics2D.OverlapPointで判定しているのですが、「Geometry Type」が「Outlines」(Edge Collider 2D と同じ扱い)だと常に false になるからのようです。輪郭だけで中身が無いからオーバーラップしてるかどうか判らないということなんでしょうかね?

TopDown Engine 入門 Extra ~Rewired 編~

TopDown Engine で Rewired を使うには

Rewired」という、様々な種類のコントローラーやキーボード、マウス、画面のタッチイベントといったあらゆる入力を簡単に管理できる、人気のアセットがあります。他の有名なアセットとの連携も多数サポートしているのも特徴で、その中に TopDown Engine の姉妹アセットである Corgi Engine も存在しているのですが、TopDown Engine は残念ながらありません。

ですが、TopDown Engine の入力システムは Corgi Engine と同じバックエンドで動いているはず。ということは、そのまま流用できるのではないか? と考え、パッケージをインポートして多少手を加えてみたら、あっさり動作するようになりました! 今回は、その方法の紹介をします。

導入手順

  1. TopDown Engine がインストールされている状態で、Rewired をインポートする。
  2. Unity の上部メニューバーから Window > Rewired > Integration > Corgi Engine > Install Integration Pack をクリックし、Corgi Engine 用の統合パッケージをインポートする。
  3. インポートされたスクリプトのusing MoreMountains.CorgiEngine;using MoreMountains.TopDownEngine;に一括置換する。
    1. これでコンパイルエラーが発生しなくなります。
  4. Unity 上部のメニューバーから Window > Rewired > Integration > Corgi Engine > Create > Rewired Input Manager をクリックする。現在のシーンに Rewired Input Manager が生成される。
    1. ソロプレイ用とマルチプレイ用のものがあります。ここではソロプレイ用を使っています。
  5. 生成された Rewired Input Manager の Add Component から Component > Corgi Engine > Manager > Rewired Input Manager をアタッチする。
  6. TopDown Engine の標準の Input Manager を削除する(使用していた場合)。

f:id:Gigacee:20200705143143p:plain
Rewired Input Manager

これでもう、TopDown Engine の操作を Rewired ベースで行えるようになりました! 初期設定ですでに TopDown Engine のキャラクターを動かせるようになっているので、お好きなコントローラーを繋いで動作確認をしてみてください😉

The coloring of this site is Dracula PRO🧛🏻‍♂️
This website uses the FontAwesome icons licensed under CC BY 4.0.

2020 GIGA CREATION