在一个游戏场景中,如果没有一个交互界面,提醒你目前的状态、得分和其他信息,游戏就失去了趣味性。本文中,我们将建立一个用于显示“Unity3D--小程序4--金色的子弹”得分情况的UI界面,随时显示主角的相关信息。
1. 在Hierarchy中建立一个空节点,所有的与UI相关的对象都放在它下面,以便于管理。
2. 在“UI节点”下面建立Canvas,同时会自动加入一个EventSystem对象
* Canvas 画布,所有的UI界面会显示在它上面,场景中可以有多个Canvas。
* EventSystem 用于接收鼠标的点击,每个场景只能有一个。
3. Canvas本身透明没有颜色,场景中无法看见,可以在Canvas下点击右键->"UI"->"Panel",加入一个“Panel"控件,并调整其大小、位置、颜色。
还可以让它的锚点对齐到Canvas上的左上角,使Panel始终显示在界面的左上角。
4. 根据游戏需要,在Panel下建立2个Text对象(Text-TextMeshPro也可以),用于显示“Scores”标题和得分(初始为0,打下一个目标得10分),并修改这两个对象的名字以便于识别。
除了显示分数外,也可以建立其他的Text对象,用于显示主角生命值(HP)或者其他信息,比如“目标被击落!”这样的场景信息。
4. 在脚本中,凡是需要用到UI控件的,都需要加入命名空间:UnityEngine.UI
如果是使用Text-TextMeshPro,需要引用命名空间:using TMPro;
5. 建立一个主角数据管理脚本MasterData.cs,挂在第一人称控制器上,用于管理有关于主角的得分(Scores),后面的主角生命值(HP)也由这个脚本管理(后面的文章再写)。代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class masterData : MonoBehaviour
{//主角分数、生命值……一切有关于主角的数据由此脚本管理
public int _Score=0; //主角的得分
public int _HP=100; //主角的生命值
public TMP_Text ScoreText, HPText, NoticeText;
void Start()
{
//ui显示初始值
ScoreText.text = _Score.ToString();
HPText.text = _HP.ToString();
}
void Update()
{
}
}
将MasterData.cs挂在第一人控制器上后,别忘记将面板中的几个Text节点拖入ScoreText, HPText, NoticeText等变量中赋值:
6. 修改子弹目标BulletTarget.cs的代码,让它在被击落的时候,调用MasterData.cs中的分数(_Score)变量加分,并且调用MasterData.cs中的coreText, HPText, NoticeText等变量,在文本中显示当前分数和信息。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class BulletTarget : MonoBehaviour
{
public float HP;
private masterData mainPerson;
private bool ifAdd=false;//建立一个判断变量,以免重复加分
void Start()
{
HP = 100;
mainPerson = GameObject.Find("第一人控制器").GetComponent<masterData>(); //获取第一人控制器上的数据管理脚本
}
void Update()
{
if (HP <= 0)
{
var rig = gameObject.transform.GetComponent<Rigidbody>();
//获取目标上挂的Rigidbody组件
rig.useGravity = true; //将重力设置为true
Destroy(gameObject,1f);
if (!ifAdd)
{
mainPerson._Score += 10; //当目标被打下时,主角的分数加10
ifAdd = true;
//在UI面板上显示分数
mainPerson.ScoreText.text = mainPerson._Score.ToString();
mainPerson.NoticeText.text = "Target's down!Yow Win";
}
}
}
}
7. 运行结果:在目标被击落时,给主角加10分,并且在UI面板中显示相应信息: