Unity3D--小程序5--UI界面

在一个游戏场景中,如果没有一个交互界面,提醒你目前的状态、得分和其他信息,游戏就失去了趣味性。本文中,我们将建立一个用于显示“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面板中显示相应信息:

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值