LoginSignup
0
0

More than 3 years have passed since last update.

Unity玉転がしチュートリアル 3-3.スコアとテキストの表示

Posted at

この記事の対象者

  • Unity入門したい人
  • 最初の一歩が踏み出せない人

OSとか環境とか

  • Windows 10 Pro
  • macOS Mojave
  • Unity 2019.2.8f1
  • Rider 2019.2.2

補足

  • 公式動画にて利用しているのはMacなので、Windowsユーザーはある程度脳内変換して見る事
  • 筆者はWindows、Macの両方の環境で確認。Ubuntuとかでは検証してない。
  • 基本Unityは英語メニューで利用
  • 間違いがあったらツッコミ大歓迎

公式

アイテムのカウント

PlayerControllerスクリプトにアイテムのカウント機能を追加

単純にスクリプトにint型のcount変数を準備するだけ
ただしこのままでは内部的に数値が増加するだけでプレイヤーに伝わらない

Unityでのテキスト表示

UnityのUIツールセットを利用する

image.png

UI>Textを追加
追加するとTextの親としてCanvas、EventSystemが追加されている

image.png

これはUnityの仕様で、全てのUI要素はCanvasの子要素として機能させなければならないという鉄の掟がある(多分)

Textを「Count Text」とリネーム

追加されたが、色が黒くて地味で見ずらいので、白に変更
Textオブジェクトには他のオブジェクトと違いRect Transformが存在する
image.png

スコア表示の位置調整

Anchor Presetsを表示して

image.png

Shift + Altキーを押しながら、一番左上のアイコンを押下

image.png

画面の左上にテキストが配置されるが、このままだとテキストがギリギリ過ぎてめり込んで見えてしまう
なのでPosX,PosYを調整して空白をもたせるとそれっぽくなる

image.png

count値の反映

PlayerControllerスクリプトの中でUnityEngine.UIのTextを用いて紐付ける

これでPlayerController側にフィールドが増えるので、そこにCountTextをドラッグして紐付ける
※最終的なソースは最後に書きますので動きはそちらを参考にする事

image.png

↓紐付けるとこの様になる

image.png

ゲームの終了

UI>Textで終了用のテキストオブジェクトを追加
自動的にCanvasの下に追加されるので、下記のように調整

要素
Pos Y 75
Font Size 24
Text Win Text

image.png

これで下記の状態になるので、実際に終了条件を満たした際に「Win Text」が更新されるスクリプトを実装

image.png

スクリプトを実装したら、PlayerオブジェクトのWin Textフィールドにドラッグして紐付ければ完成

最終的なPlayerController.cs

PlayerController.cs

using System;
using UnityEngine;
using UnityEngine.UI;

public class PlayerController : MonoBehaviour
{
    public float speed;
    public Text countText;
    public Text winText;

    private Rigidbody rb;
    private int count;

    // See also:https://docs.unity3d.com/ja/2019.1/Manual/ExecutionOrder.html
    private void Start()
    {
        rb = GetComponent<Rigidbody>();
        count = 0;
        SetCountText();
        winText.text = "";
    }

    private void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal,0.0f,moveVertical);
        rb.AddForce(movement * speed);
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Pick Up"))
        {
            other.gameObject.SetActive(false);
            count++;
            SetCountText();
        }
    }

    private void SetCountText()
    {
        countText.text = "Count :" + count.ToString();
        if (count >= 12)
        {
            winText.text = "You Win!";
        }
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0