8.开始场景-开始界面
8.1 知识点
拖一个自定义GUI的根对象,创建一个开始面板空物体,拼接开始面板上的控件
开始面板的标题标签可以用两个不同颜色的标签进行叠加
添加三个按钮,调整位置
理清面板基类要做的事,面板基类抽象出所有面板共有的逻辑,所有面板都会继承这个面板基类
创建面板基类,变成泛型,并且约束成类,实现面板基类单例,实现面板基类显隐
//泛型面板基类 要约束成类 才能在Awake里as成对应传进来的泛型类
public class BasePanel<T> : MonoBehaviour where T:class
{
//实现面板基类单例
//继承了MonoBehaviour,所以不能直接new
//两个关键的静态成员
//私有的静态成员变量(申明)
private static T instance;
//公共的静态成员属性或者方法(获取)
public static T Instance => instance;
private void Awake()
{
//在Awake中初始化的 原因是
//我们的面板脚本 在场景上 肯定只会挂载一次
//那么我们可以在这个脚本的生命周期函数的Awake中
//直接记录场景上 唯一的这个脚本
instance = this as T;
}
//实现面板基类显隐
//面板脚本最终是要挂载到对应的面板游戏对象上的,通过控制面板游戏对象是显隐来控制面板的显示隐藏
//显示面板
public virtual void ShowMe()
{
this.gameObject.SetActive(true);
}
//隐藏面板
public virtual void HideMe()
{
this.gameObject.SetActive(false);
}
}
创建开始面板脚本,继承面板基类传入泛型,挂载到开始面板空物体上,声明开始面板中的公共的成员变量,拖拽赋值,Start内,监听各个按钮点击事件,让鼠标锁定到Game窗口内
//开始面板
public class BeginPanel : BasePanel<BeginPanel>
{
//声明开始面板中的公共的成员变量 来关联各个控件
public CustomGUIButton btnBegin;
public CustomGUIButton btnSetting;
public CustomGUIButton btnQuit;
public CustomGUIButton btnRank;
void Start()
{
//监听各个按钮点击事件
btnBegin.clickEvent += () =>
{
//切换场景
SceneManager.LoadScene("GameScene");
};
btnSetting.clickEvent += () =>
{
//打开设置面板
SettingPanel.Instance.ShowMe();
//隐藏自己 避免穿透
HideMe();
};
btnQuit.clickEvent += () =>
{
//退出游戏
Application.Quit();
};
btnRank.clickEvent += () =>
{
//打开排行榜面板
//避免穿透 隐藏自己
HideMe();
};
//让鼠标锁定到Game窗口内
//目的是因为方便控制坦克的头部转向 所以锁定鼠标在窗口内 避免鼠标出去不好控制
Cursor.lockState = CursorLockMode.Confined;
}
}
8.2 知识点代码
BasePanel
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//泛型面板基类 要约束成类 才能在Awake里as成对应传进来的泛型类
public class BasePanel<T> : MonoBehaviour where T:class
{
//实现面板基类单例
//继承了MonoBehaviour,所以不能直接new
//两个关键的静态成员
//私有的静态成员变量(申明)
private static T instance;
//公共的静态成员属性或者方法(获取)
public static T Instance => instance;
private void Awake()
{
//在Awake中初始化的 原因是
//我们的面板脚本 在场景上 肯定只会挂载一次
//那么我们可以在这个脚本的生命周期函数的Awake中
//直接记录场景上 唯一的这个脚本
instance = this as T;
}
//实现面板基类显隐
//面板脚本最终是要挂载到对应的面板游戏对象上的,通过控制面板游戏对象是显隐来控制面板的显示隐藏
//显示面板
public virtual void ShowMe()
{
this.gameObject.SetActive(true);
}
//隐藏面板
public virtual void HideMe()
{
this.gameObject.SetActive(false);
}
}
BeginPanel
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
//开始面板
public class BeginPanel : BasePanel<BeginPanel>
{
//声明开始面板中的公共的成员变量 来关联各个控件
public CustomGUIButton btnBegin;
public CustomGUIButton btnSetting;
public CustomGUIButton btnQuit;
public CustomGUIButton btnRank;
void Start()
{
//让鼠标锁定到Game窗口内
//目的是因为方便控制坦克的头部转向 所以锁定鼠标在窗口内 避免鼠标出去不好控制
Cursor.lockState = CursorLockMode.Confined;
//监听各个按钮点击事件
btnBegin.clickEvent += () =>
{
//切换场景
SceneManager.LoadScene("GameScene");
};
btnSetting.clickEvent += () =>
{
//打开设置面板
SettingPanel.Instance.ShowMe();
//隐藏自己 避免穿透
HideMe();
};
btnQuit.clickEvent += () =>
{
//退出游戏
Application.Quit();
};
btnRank.clickEvent += () =>
{
//打开排行榜面板
RankPanel.Instance.ShowMe();
//避免穿透 隐藏自己
HideMe();
};
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com