13.游戏界面

13.游戏场景-游戏界面


13.1 知识点

创建游戏场景Scene,添加一个特效。注意主摄像机改成纯色模式避免天空盒模式的游影响。创建NGUI根对象,设置好分辨率。

查看游戏面板要创建的控件

创建游戏面板Panel。添加一个返回按钮,一个标题Label,一个时间Label,十个血量块。血量块可以参考选角面板的属性块。检查不同分辨率下控件的位置,检查DrawCall

创建游戏面板GamePanel脚本。继承BasePanel。添加各个控件的变量挂载到游戏面板控件上并关联各控件。设置一个时间变量,在Update类更新时间,显示到时间Label上。封装一个提供给外部改变血量的方法,根据血量大小,显示或隐藏对应的血量对象块。初始化时给返回按钮添加监听,点击返回按钮应该暂时确认退出买面板,待补充。初始化时可以测试将默认血量设置为5,看看有没有问题,后面记得删除。

//游戏界面脚本类
public class GamePanel : BasePanel<GamePanel>
{
    //返回按钮
    public UIButton btnBack;
    //时间标签
    public UILabel labTime;
    //血量所有对象的集合
    public List<GameObject> hpObjs;

    //当前游戏运行的时间
    public float nowTime = 0;

    public override void Init()
    {
        //为返回按钮添加点击事件
        btnBack.onClick.Add(new EventDelegate(() => {
            //点击 退出按钮后 
            //显示 确定退出面板
        }));

        //测试将默认血量设置为5
        ChangeHp(5);
    }

    /// <summary>
    /// 提供给外部 改变血量的 方法
    /// </summary>
    /// <param name="hp">要设置的新血量值</param>
    public void ChangeHp(int hp)
    {
        for (int i = 0; i < hpObjs.Count; i++)
        {
            //根据血量大小,显示或隐藏对应的血量对象
            hpObjs[i].SetActive(i < hp);
        }
    }

    private void Update()
    {
        //更新游戏运行时间
        nowTime += Time.deltaTime;

        //将游戏运行时间以时、分、秒的格式显示在时间标签上
        labTime.text = "";

        //时(小时)
        if ((int)nowTime / 3600 > 0)
            labTime.text += (int)nowTime / 3600 + "h";
        //分
        if ((int)nowTime % 3600 / 60 > 0 || labTime.text != "")
            labTime.text += (int)nowTime % 3600 / 60 + "m";
        //秒
        labTime.text += (int)nowTime % 60 + "s";
    }
}

13.2 知识点代码

//引用命名空间
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//游戏界面脚本类
public class GamePanel : BasePanel<GamePanel>
{
    //返回按钮
    public UIButton btnBack;
    //时间标签
    public UILabel labTime;
    //血量所有对象的集合
    public List<GameObject> hpObjs;

    //当前游戏运行的时间
    public float nowTime = 0;

    public override void Init()
    {
        //为返回按钮添加点击事件
        btnBack.onClick.Add(new EventDelegate(() => {
            //点击 退出按钮后 
            //显示 确定退出面板
        }));

        //测试将默认血量设置为5
        ChangeHp(5);
    }

    /// <summary>
    /// 提供给外部 改变血量的 方法
    /// </summary>
    /// <param name="hp">要设置的新血量值</param>
    public void ChangeHp(int hp)
    {
        for (int i = 0; i < hpObjs.Count; i++)
        {
            //根据血量大小,显示或隐藏对应的血量对象
            hpObjs[i].SetActive(i < hp);
        }
    }

    private void Update()
    {
        //更新游戏运行时间
        nowTime += Time.deltaTime;

        //将游戏运行时间以时、分、秒的格式显示在时间标签上
        labTime.text = "";

        //时(小时)
        if ((int)nowTime / 3600 > 0)
            labTime.text += (int)nowTime / 3600 + "h";
        //分
        if ((int)nowTime % 3600 / 60 > 0 || labTime.text != "")
            labTime.text += (int)nowTime % 3600 / 60 + "m";
        //秒
        labTime.text += (int)nowTime % 60 + "s";
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏