5. ゲームのUIを追加する - remyroez/UnityTutorial GitHub Wiki
ゲーム画面に様々な情報を表示するために、GUIを追加します。
得点を表示するためのUIを追加します。
まずは、UIの基礎となる Canvas を追加します。
- Hierarchy ビューを選択。
- Create > UI > Canvas を選択し、新規キャンバス "Canvas" を作成。
- Inspector ビューを選択。
- Canvas Scaler > Ui Scale Mode を "Scale With Screen Mode" に設定。
- Canvas Scaler > Screen Match Mode を "Expand" に設定。
同じ階層に EventSystem も追加されますが、今回は使用しません。
得点を表示するためのテキストを追加します。
- Hierarchy ビューを選択。
- Create > UI > Text を選択し、Canvas の下に、新規テキスト "ScoreText" を作成。
- Inspector ビューを選択。
- Text > Text を "0" に設定。
- Text > Character > Font Style を "Bold" に設定。
- Text > Character > Font Size を "60" に設定。
- Text > Paragraph > Alignment を "center(真ん中)/bottom(右端)" に設定。
- Rect Transform > Anchor Presets(左側のアイコン) から、 "center/bottom" を選択。
- Rect Transform > Width/Height を "400, 100" に設定。
- Rect Transform > Pivot を "0.5, 0" に設定。
これで、画面中心の下側にくっつくテキストが出来ました。ウィンドウサイズが変更されても、常に下に表示されます。
得点を受け取り、表示するためのハンドラを作成します。
これまで通り、ハンドラを作成します。
public interface IScoreViewHandler : IEventSystemHandler
{
void SetScore(int score);
}
public class ScoreViewHandler : MonoBehaviour, IScoreViewHandler
{
public void SetScore(int score)
{
Text text = GetComponent<Text>();
if (text)
{
text.text = score.ToString();
}
}
}
ScoreText に ScoreViewHandler をコンポーネントとして設定しておきます。
これまでは、得点アイテムに接触すると削除するのみでしたが、得点として加算し、得点表示ハンドラへ送信するようにします。
public class ScoreHandler : MonoBehaviour, IScoreHandler
{
public GameObject scoreView;
protected int score = 0;
public void OnTriggerEnterItem(GameObject target, Collider hit)
{
if (hit.CompareTag("Player"))
{
score += 1;
Destroy(target);
UpdateScore();
}
}
public void UpdateScore()
{
if (!scoreView) return;
ExecuteEvents.Execute<IScoreViewHandler>(
scoreView,
null,
(handler, data) => handler.SetScore(score)
);
}
}
得点アイテムに接触すると得点を1加算し、得点表示ハンドラへ現在の得点を送信します。
scoreView には予め ScoreText を設定しておきます。
実装した処理が正しく動作するか確認します。
- ゲームを開始する。
- 画面下に ”0" と表示されることを確認する。
- 得点アイテムに接触すると、画面下の得点表示が1ずつ増えていくことを確認する。
画面下に何も表示されていなければ、位置調整が必要です。接触しても数字が増えない場合は、加算を忘れているか、送信を忘れているかです。コンポーネントとして設定し忘れている可能性もあります。