本文へスキップ
ゲームUI設計

拠点制圧とオーバータイムを見失わせない目標UI設計ガイド

進行バー、占領状態、得点差、延長条件を読みやすく整えて、ルール理解不足による不満を減らす設計を整理します。

公開日: 2026-07-13#Unity#対戦UI#目標設計#UI設計#Beginner
+
*
+
ココ先生・喜ぶ
ココ先生
ゲーム開発の案内役
この記事では ローディング進行表示 を、読んで終わりにせず、拠点にいるチーム数から、制圧ゲージとオーバータイムを動かします。
+
*
+
はじめちゃん・笑う
はじめちゃん
ゲームエンジン学習中
拠点制圧とオーバータイムを見失わせない目標UI設計ガイド を読む前に、まずUnity のどこを見ればよいかを確認したいです。
ココ先生
拠点にいるチーム数から、制圧ゲージとオーバータイムを動かします。
はじめちゃん
両チームが入った時だけOVERTIMEを出せばよいのですね。
ココ先生
Triggerで人数を数え、Image.fillAmountとラベルを更新します。
脅威インジケーター、拠点進行バー、リスポーンタイマーをまとめて示したゲームUIのヒーロー画像
完成イメージ

制圧率を動かす

拠点内のチーム数からBlueFillとRedFillの量を更新します。

競合を見つける

青と赤の両方が入った時は制圧率を止めます。

OVERTIMEを表示

競合中だけラベルを出し、延長戦だと伝えます。

導入

拠点の上に制圧ゲージを出し、両チームが入るとオーバータイムの色へ変えるUIを作ります。

これから作るもの

  1. CapturePoint に Trigger Collider を付けます。
  2. 子Canvasに Image の BlueFillRedFill、TMPの OvertimeLabel を置きます。

ステップ1: ゲージを増やす

[SerializeField] Image blueFill, redFill; [SerializeField] TMP_Text overtimeLabel;
float progress; int blueInside, redInside;
void Update() {
 bool contested=blueInside>0 && redInside>0;
 if (!contested && blueInside>0) progress=Mathf.MoveTowards(progress,1,Time.deltaTime*.2f);
 if (!contested && redInside>0) progress=Mathf.MoveTowards(progress,-1,Time.deltaTime*.2f);
}

ステップ2: 色とオーバータイムを描く

void RefreshUi() {
 blueFill.fillAmount=Mathf.Max(0,progress); redFill.fillAmount=Mathf.Max(0,-progress);
 bool overtime=blueInside>0 && redInside>0;
 overtimeLabel.gameObject.SetActive(overtime); overtimeLabel.text=overtime ? "OVERTIME" : "";
}

完成版

using UnityEngine; using UnityEngine.UI; using TMPro;
public class CapturePointUi : MonoBehaviour { [SerializeField] Image blueFill,redFill; [SerializeField] TMP_Text overtimeLabel; float progress; int blueInside,redInside;
 void Update(){bool c=blueInside>0&&redInside>0;if(!c&&blueInside>0)progress=Mathf.MoveTowards(progress,1,Time.deltaTime*.2f);if(!c&&redInside>0)progress=Mathf.MoveTowards(progress,-1,Time.deltaTime*.2f);blueFill.fillAmount=Mathf.Max(0,progress);redFill.fillAmount=Mathf.Max(0,-progress);overtimeLabel.gameObject.SetActive(c);}
 void OnTriggerEnter(Collider o){if(o.CompareTag("Blue"))blueInside++;if(o.CompareTag("Red"))redInside++;} void OnTriggerExit(Collider o){if(o.CompareTag("Blue"))blueInside--;if(o.CompareTag("Red"))redInside--;}}
はじめちゃん
ゲージを止める条件は何ですか?
ココ先生
青と赤の両方が拠点内にいる時はcontestedとして進行を止めます。
はじめちゃん
流れは「読み込み開始を表示」から始めて、「Load Buttonで進める」で操作を入れる、と覚えればよいですか?
ココ先生
その通りです。その後に「進行率更新を確認」で途中状態を見て、「完了を伝えるで結果を見る」で結果を確認します。順番を固定すると、失敗した場所も見つけやすくなります。
はじめちゃん
つまり、いきなり完成システムにせず、状態名、表示、値の変化を小さくそろえるのですね。
ココ先生
はい。最後は「ローディング進行表示をわかりやすく考える」の考え方で、難しい処理をプレイヤーに伝わる短い合図へ置き換えられるか確認しましょう。
この記事のまとめを案内するガイドキャラクター

この記事のまとめ

進行バー、占領状態、得点差、延長条件を読みやすく整えて、ルール理解不足による不満を減らす設計を整理します。

大きな違いを生むのは、派手な性能よりも 毎日触れる環境を無理なく整えること です。見やすい画面と使いやすい道具がそろうと、学習や次の一歩を決めやすくなります。