ゲームUI素材 Unity HUDキット — 体力バー・ダメージ数字・トースト通知・セーフエリア・連打防止が最初から動く C#6本+角丸ゲージシェーダー(Unity 2021.3以降 / Built-in・URP)

Unity 2021.3 以降 / uGUI。Inspector で触れる調整項目は 51個(+シェーダー7項目)、コードは一度も開かなくて構いません。Asset Store の同種 UI/HUD アセットは $20〜$60 の帯で並んでいます。

インポート

  1. Unity 2021.3+ : Assets > Import Package > Custom Package
  2. Assets/GameUiKit

収録内容 (8)

ファイル用途
Runtime/UiKitTheme.cs色・警告ライン・基準時間を1つのアセットにまとめる置き場。ここを自分のゲームの色に変えるだけで、体力バー・ダメージ数字・通知の色が一度に変わります。各コンポーネントの theme 欄は空でも動きます。
Runtime/HealthBarView.cs体力バー本体。遅れて落ちる「ダメージ跡」バー、フレームレートに依存しない追従、最大値0での0除算回避、シーン読み込み直後に0から伸びる不具合の防止まで入っています。Image Type が Filled でなければ自動で直します。
Runtime/DamageNumberSpawner.cs浮き上がって消えるダメージ数字。poolSize の数だけ作って以後は使い回すので、ボス戦で毎フレーム Instantiate して GC が跳ねることがありません。会心・回復の色分けと左右のばらけも入っています。
Runtime/ToastQueue.cs一行通知の待ち行列。コルーチンを使わず Update だけで動くので、表示の途中でオブジェクトを無効化しても中途半端なフェードが残りません。同じ文章の連投を無視し、溢れたぶんは古いものから捨てます。ポーズ中(timeScale = 0)でも流せます。
Runtime/SafeAreaFitter.csノッチ・ホームバーを避ける全画面コンテナ。安全領域が実際に変わったときだけ計算するので、毎フレームのレイアウト再構築が起きません。画面回転・機種違いにそのまま追従し、余白を入れすぎても潰れません。
Runtime/UiButtonFeedback.cs押し込みの縮みと音、そして連打の無視。cooldownSeconds のあいだ2回目の入力を捨てるので、購入・決定ボタンの二重発注が起きません。OnDisable で購読を外し、こちらが無効化したときだけボタンを元に戻します(ゲーム側が意図的に無効化したボタンは触りません)。
Shaders/UiRoundedPanel.shaderPNG を1枚も使わずに角丸パネルとゲージを描くシェーダー。距離関数で角丸と枠を計算するので、解像度をいくら上げてもボケず、9スライス画像も要りません。ライティングに依存しない Unlit なので Built-in と URP で描画されます(HDRP は未検証)。
Documentation/QuickStart.mdインポート手順・動作環境・5分セットアップ・詰まったときの対処・購入後の扱い(7日返金/バージョン軸の無料更新/問い合わせ)まで、この1枚で完結する日本語の手順書。入っていないもの(画像素材)も先に明記します。

インスペクターで変更する値

ファイルフィールド効果
Runtime/HealthBarView.csmaxValue自分のゲームの数字を入れる場所。0 のあいだは 0 除算を避けてバーを 0 のままにします
Runtime/HealthBarView.csfollowSpeed0 で即時反映、8 前後で自然な追従。フレームレートが変わっても見え方が変わりません
Runtime/HealthBarView.csghostDelay大ダメージの重さはこの1つで決まります。0.3〜0.6 が見やすい範囲
Runtime/HealthBarView.csghostSpeedfollowSpeed より小さくすると跡がはっきり残ります
Runtime/HealthBarView.cslabelFormat「34 / 100」「34」「HP 34」などをコードを触らずに変えられます
Runtime/DamageNumberSpawner.cspoolSizeこの数だけ作って以後は使い回します。ボス戦でメモリと GC が跳ねません
Runtime/DamageNumberSpawner.csriseDistance画面の解像度と UI の大きさに合わせて調整します
Runtime/DamageNumberSpawner.cslifeSeconds手数の多いゲームほど短く。0.6〜1.0 が目安です
Runtime/DamageNumberSpawner.csspreadX連続ヒットで数字が1か所に重なって読めなくなるのを防ぎます
Runtime/DamageNumberSpawner.cscriticalScale会心の気持ちよさをコードなしで調整できます
Runtime/ToastQueue.csmaxQueued拾い物の連続で通知が数分ぶん詰まるのを防ぎます。溢れたぶんは古いものから捨てます
Runtime/ToastQueue.csholdSeconds文章の長さに合わせて。読み切れない・長すぎるの調整点
Runtime/ToastQueue.csignoreTimeScaleTime.timeScale = 0 のメニュー中に通知を出したいときに ON
Runtime/ToastQueue.csdropRepeats同一の通知が縦に並ぶ、いちばん多い見苦しさを止めます
Runtime/UiButtonFeedback.cscooldownSeconds購入・決定ボタンの二重発注を止める場所。0.4 秒以上を推奨します
Runtime/UiButtonFeedback.cspressScale0.94 で 6% 縮みます。触った手応えの強さを決めます
Runtime/SafeAreaFitter.csextraPadding端末の端で指が掛かる場合に、機種ごとの微調整をここだけで済ませます
Runtime/SafeAreaFitter.csapplyTopBottom縦持ちと横持ちで避けたい方向が違うため、方向ごとに切り替えられます
Runtime/UiKitTheme.cswarnRatio0.3 で残り30%。自分のゲームの緊張のライン(買い手自身の設計値)を入れる場所
Runtime/UiKitTheme.cshealthLowColor買い手のゲームの配色に合わせる中心。ここ1か所で全画面のバーが変わります
Runtime/UiKitTheme.csbaseDurationToastQueue の useThemeTiming を ON にすると、キット全体の速さがこの値で揃います

無料スクリプト — Runtime/UiKitTheme.cs

このファイルをそのままプロジェクトにコピーしてください。パック収録の1本です。

using UnityEngine;

namespace GameUiKit
{
    // One asset that holds every colour and timing the kit uses.
    // Create it once, drop it into each component, restyle the whole HUD from here.
    [CreateAssetMenu(menuName = "Game UI Kit/Theme", fileName = "UiKitTheme")]
    public class UiKitTheme : ScriptableObject
    {
        [Tooltip("体力が十分にあるときのバーの色。")]
        public Color healthFullColor = new Color(0.29f, 0.76f, 0.35f, 1f);

        [Tooltip("体力が warnRatio を下回ったときのバーの色。")]
        public Color healthLowColor = new Color(0.87f, 0.24f, 0.24f, 1f);

        [Tooltip("遅れて追いつく「ダメージ跡」バーの色。")]
        public Color healthGhostColor = new Color(0.96f, 0.85f, 0.29f, 1f);

        [Range(0f, 1f)]
        [Tooltip("この割合を下回ると体力バーが警告色に変わります(0.3 = 残り30%)。")]
        public float warnRatio = 0.3f;

        [Tooltip("通常ダメージ数字の色。")]
        public Color damageColor = new Color(1f, 0.94f, 0.85f, 1f);

        [Tooltip("会心(クリティカル)ダメージ数字の色。")]
        public Color criticalColor = new Color(1f, 0.62f, 0.16f, 1f);

        [Tooltip("回復数字の色。")]
        public Color healColor = new Color(0.44f, 0.87f, 0.55f, 1f);

        [Tooltip("トースト通知の文字色。")]
        public Color toastTextColor = new Color(1f, 1f, 1f, 1f);

        [Min(0)]
        [Tooltip("UI アニメーションの基準時間(秒)。ToastQueue の useThemeTiming を ON にすると、この値で速さが揃います。")]
        public float baseDuration = 0.25f;

        // The ratio is clamped here, so a caller passing 1.4 or -3 can never pick a wrong colour.
        public Color HealthColor(float ratio)
        {
            if (ratio < 0f) ratio = 0f;
            if (ratio > 1f) ratio = 1f;
            return ratio <= warnRatio ? healthLowColor : healthFullColor;
        }

        // Keeps the values inside the range the timers can actually use, even after a hand edit.
        private void OnValidate()
        {
            if (baseDuration < 0f) baseDuration = 0f;
            if (warnRatio < 0f) warnRatio = 0f;
            if (warnRatio > 1f) warnRatio = 1f;
        }
    }
}

完全版を受け取る $20

このページは実際に動く一部です。完全版には以下がすべて含まれます。

검로드 1리스팅 · 5개국어 상세 · ★소유 · 전체 깊이 · 오프라인 · 기계가 먹는 파일 · 가격=⛔상수 금지 — ★측정된 경쟁 밴드(L4)

受け取る