[Unity]Damage Numbers Proを使って楽にダメージ表示させる

カテゴリー:
Unity
投稿:2021.5.10

Unityでダメージを表示させる方法は色々ありますが、色々あるがゆえにどうやって表示させようか迷っていました。そんな中、かなりシンプルで高速に動くダメージ表示が優良アセットであったので使ってみました。価格は7.7ドルです。1000円以下で使えて見栄えもいいのでかなりお気に入りです。

Damage Numbers Pro

ものとしてはTextMeshProでダメージを表示させます。そのため2Dでも3Dでも使えます。数字の左右に文字列を表示したり、数字表示を連続したあとに合計値を表示させたりできます。複雑に挙動を制御できますがデフォルトのまま簡単に設置するだけでもいい感じに数字をポップアップで表示できます。

使い方を簡単に説明します。

Damage Numbers Proの使い方

まずはDamage Numbers Proをインストールしてください。TextMeshProがインストールされていないと入れるかどうか追加でダイアログが表示します。TextMeshProは必須なので入れましょう。

まずはインスタンス化するためのゲームオブジェクトを作る

ゲームオブジェクト作成で2D Objectに「Damage Number」が追加されています。作成しましょう。作成されたDamage Numberオブジェクトには動作に必要なスクリプトなどが予めセットされています。

TextMeshProのフォントを指定する

Window>TextMeshPro>Font Asset CreatorでTextMeshPro用のフォントを書き出します。Source Font Fileで使いたいフォントを指定し、Generate Font Atlasでフォントを書き出します。これで好きなフォントを利用できます。

なお、この作業を行わなくてもDamage Numbers Proは使えます。その場合は初めから設定されている「LiberationSans SDF」が使われます。

Damage Numberオブジェクトにフォントをアタッチする

Damage Numberオブジェクトのインペクターを下の方にスクロールするとOther Inspectorsという項目にTextMeshProのタブボタンがあるのでクリック。そこのMainSettings内のFont Assetを先程作ったフォント、もしくは好きなフォントをアタッチします。

シェーダーを設定

Damage Numberオブジェクトのシェーダーを変更します。先程のTextMeshProタブの横にあるMaterialタブをクリックするとシェーダーを変更できます。デフォルトではMobile用になっているようです。とりあえず色々と性能を検証する場合はDistance Field Overlayを選択しましょう。

Damage Numberオブジェクトをインスタンス化し、スクリプトで呼び出す

作ったDamage NumberオブジェクトはProjectに放り込んでインスタンス化します。Hierarchyのオブジェクトは消しましょう。

using DamageNumbersPro;

初めにusingでDamageNumbersProを使えるようにします。

public class DamageNumberTest : MonoBehaviour
{
    public DamageNumber prefab;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.N))
        {
            prefab.CreateNew(Random.Range(1f, 10f), transform.position);
        }
    }
}

インスタンス化したprefabをCreateNewで作ることでダメージが表示されます。上記はキーボードのNを押すとぴょこぴょこ表示されるだけのシンプルなスクリプト記述です。

ダメージ値と表示させる場所は上記のようにシンプルです。これでダメージがポップアップで表示されます。簡単ですね。細かな挙動はオブジェクトのインスペクター内で行います。

Damage Numbers Proの設定

表示させる方法は上記のとおりです。ここからは挙動などの設定をいくつかご紹介。

見た目設定

カラー

TextMeshProの項目で単色とグラデーションの設定ができます。フォント設定はここにまとまっています。

ブラーやアウトラインなどの装飾

Materialの項目で見た目を変更できます。Faceで文字バックに輝くようなグラデーションを表示できるようですがこちらの環境では動かず・・・。サンプルシーンも機能せず、Unityバージョンを変えてもできなかったのでTextMeshProのバージョンと相性があるかもしれません。

挙動の設定

プレビュー

バーを動かすとダメージアニメーションを再生できます。動きのチェックが楽です。シェイクなどいくつかの挙動はプレビューできないようです。

Main Settings

Life time:数字が表示されている時間を指定。

Number

Number Setting:文字サイズなどフォント情報をコンポーネントで制御できます。

Digit Setting:小数点以下の表示や、単位の.表記などが制御できます。Suffix ShortenでKやMなどの略称表記の指定が可能です。

Prefix

数字の左側に表示するテキストを入力できます。位置調整や文字色などある程度の変更が可能です。クリティカル表記などに使えますね。

Suffix

数字の右側に表示するテキストを入力できます。位置調整や文字色などある程度の変更が可能です。ダメージ表記に使えますね(100DamageのDamage部分)。

Fading

フェードインとフェードアウトで構成されています。表示される瞬間と、表示された後のフェードをここで指定します。positionとScaleである程度の動きを指定できるので縦伸びの文字にしたりできます。

Movement

ダメージ数値の全体的な動きです。Move TypeにLERPとVELOCITYの2種類設定できます。Move Typeの違いは数値が落下するかしないかです。XY座標の数値で制御します。LERPだと速度、VELOCITYだと重力が指定できます。

LERP:重力なし
VELOCITY:重力あり

Shaking

その名の通りシェイクする設定です。数値の表示前・表示中・表示後の指定ができます。

Start Rotation

指定したMinとMaxの間の角度でランダムに表示されます。

Combination

連続で表示された数値の合計を表示させます。設定は2種類あります。

OLDEST:常に合計値を更新しながら表示させる
NEWEST:全ての数値が表示されたら合計値を表示させる

Following

数値が指定したオブジェクトに追従します。

Perspective Camera

オンにするだけで数値がカメラ方向を向きます。オンにしない場合はオブジェクト準じになります。

Pooling

メモリに数値を確保してパフォーマンスを向上させるようです。表示数が多い場合には検討したほうが良いかもしれません。普通のアクションくらいなら必要なさそうです。

いちおうヘルプのGoogle翻訳をおいておきます。

「ラムを犠牲にしてスポーンパフォーマンスを向上させます。
ダメージ数は破壊されるのではなくリサイクルされます。
numberDprefab.PrewarmPool()を1回使用して、プールを埋めます。
各ダメージ番号プレハブには独自のプールがあります。
プールがなくなると、新しい番号が作成されます。
プールサイズが大きいほど、RAMの使用量が多くなります。」