Unity 编写入门项目 roll a ball 之 设置文本(六)

新建 TextMeshPro UI组件,并导入依赖(UI组件命名为 Count)

首次创建 TextMeshPro UI组件,会自动生成 Canvas、EventSystem UI组件


在 Canvas UI组件下,新建 TextMeshPro UI组件,并命名为 WinTips

Count:显示积分
WinTips:胜利提示


切换到 2D 视图


生成 Font Asset

下载 txt 字体(用于编译 Font Asset)

下载地址

准备一份系统中文字体

C:\Windows\Fonts 中文字体(如:微软雅黑)

在 Assert 目录下,新建 Font 子目录,并粘贴以上字体文件
编译 Font Asset
删除多余文件

.meta 文件是 Unity IDE 在自动生成的


设置 Count 组件


设置 WinTips 组件


查看布局


修改脚本(PlayerController.cs 全量代码如下)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;

public class PlayerController : MonoBehaviour
{

    public float speed = 10;    // 公开属性,方便在 IDE 修改速度值
    public string tagName = "Star";    // 公开属性,方便在 IDE 修改 tagName 值
    public TextMeshProUGUI countLabel;    // 公开属性,方便在 IDE 修改 countLabel 值
    public TextMeshProUGUI winTips;    // 公开属性,方便在 IDE 修改 winTips 值
    public string countLabelText = "积分: ";    // 公开属性,方便在 IDE 修改 countLabelText 值
    private Rigidbody rb;
    private float movementX = 0;
    private float movementY = 0;
    private int count = 0;
    private int countAll;

    // 生命周期函数
    // 触发时机:物体被加载到场景时
    void Start()
    {
        rb = GetComponent();

        // 获取场景中 tag 为 Star 的物体数量
        countAll = GameObject.FindGameObjectsWithTag(tagName).Length;

        // 隐藏 winTips UI组件
        winTips.gameObject.SetActive(false);

        SetCountText();
    }

    // 生命周期函数
    // 触发时机:物体进行物理模拟时
    void FixedUpdate()
    {
        // 组装 3D 向量
        Vector3 vector3D = new Vector3(movementX, 0.0f, movementY);

        // 为刚体施加力
        rb.AddForce(vector3D * speed);
    }

    // 事件函数,监听移动输入
    void OnMove(InputValue movement)
    {
        Vector2 vector2D = movement.Get();
        movementX = vector2D.x;
        movementY = vector2D.y;
    }

    // 事件函数,监听是否与 Trigger碰撞体 产生碰撞
    void OnTriggerEnter(Collider colliderGameObject)
    {
        if(colliderGameObject.gameObject.CompareTag(tagName))
        {
            colliderGameObject.gameObject.SetActive(false);

            count += 1;
            SetCountText();
        }
    }

    // 设置积分文本
    void SetCountText()
    {
        countLabel.text = countLabelText + count;

        if(count >= countAll)
        {
            // 显示 winTips UI组件
            winTips.gameObject.SetActive(true);
        }
    }
}

绑定 UI组件 至脚本


修复、升级输入模块


运行项目

你可能感兴趣的:(Unity 编写入门项目 roll a ball 之 设置文本(六))