新建 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<Rigidbody>();
// 获取场景中 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<Vector2>();
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);
}
}
}
网友评论