3.提示面板
3.1 拼面板
创建一个Panel取名为TipPanel,TipPanel下创建一个Texture作为面板的底图,拖拽提示面板示意图,对着来拼
- 一般会调整透明度为50左右,对着拼见面。透明度在设置颜色中设置
把登录注册和通用的美术资源分别打成两个图集
创建一个Sprite,选择黑色背景作为图片,调整切片模式九宫格透明度大小宽高锚点等,作为半透明底图
创建一个Sprite,选择提示面板背景作为图片,调整切片模式九宫格透明度大小宽高锚点等,作为提示面板的面板背景,注意层级
创建一个Sprite,选择面板标题背景作为图片,调整切片模式九宫格透明度大小宽高锚点等,作为提示面板的面板标题背景,注意层级
创建一个Sprite,选择登录按钮通用背景作为图片,调整切片模式九宫格透明度大小宽高锚点等,作为确定按钮背景的同时当做确定按钮对象,注意层级。再创建一个Sprite作为确定按钮背景子物体,选择确定图片,注意层级。给确定按钮添加NGUI碰撞体和Button脚本。
创建两个Label标签,分别代表提示文本和提示标题文本
小技巧:在文本颜色设置窗口中点击小吸管可以指定像素获得示意图文本颜色是进行设置
删除平面板对应用的背景图
检查DrawCall是否可以优化
检查面板各种情况,如文本过多时,不同分辨率时的情况
3.2 功能制作
分析需求可知,写提示面板前应该有一个面板基类。提示面板应该有暴露给外部传入字符串显示到提示文本的方法。
创建面板基类BasePanel脚本,设置成泛型单例的形式。Awake时转成泛型类型。提供初始化,显示自身,隐藏自身的方法,这些方法都可以重写。其中初始化在Start中调用。
//泛型面板基类 泛型一定要是类
public abstract class BasePanel<T> : MonoBehaviour where T:class
{
//单例模式
private static T instance;
public static T Instance => instance;
protected virtual void Awake()
{
//转类型
instance = this as T;
}
protected virtual void Start()
{
//初始化 主要用于 监听按钮等事件
Init();
}
/// <summary>
/// 方便子类继承时 进行初始化操作
/// 只要子类在其中写一些初始化逻辑
/// 最终都会在Start里面执行
/// 子类就不太需要去写Start函数了
/// </summary>
public abstract void Init();
/// <summary>
/// 显示自己
/// 写成虚函数的目的 是方便拓展 可能子类面板 需要在显示 或者隐藏自己时
/// 做一些额外操作 那么你可以在子类去重写 这两个函数 达到目的
/// </summary>
public virtual void ShowMe()
{
this.gameObject.SetActive(true);
}
/// <summary>
/// 隐藏自己
/// </summary>
public virtual void HideMe()
{
this.gameObject.SetActive(false);
}
}
创建提示面板TipPanel脚本,继承面板基类。创建提示面板自身的成员变量确定按钮和提示信息文本并在Inspector窗口关联。开始时隐藏自身。添加确定按钮点击隐藏提示面板的监听。暴露给外面一个改变提示文本的方法。
//提示面板
public class TipPanel : BasePanel<TipPanel>
{
//确定按钮
public UIButton btnSure;
//显示的提示信息
public UILabel labInfo;
public override void Init()
{
//写初始化逻辑
//确定按钮点击后要做什么
btnSure.onClick.Add(new EventDelegate(() => {
//隐藏自己
HideMe();
}));
//一开始 就把自己隐藏了 等待别人使用自己
HideMe();
}
/// <summary>
/// 改变提示面板 提示的内容
/// </summary>
/// <param name="info"></param>
public void ChangeInfo(string info)
{
labInfo.text = info;
}
}
3.3 代码
BasePanel
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//泛型面板基类 泛型一定要是类
public abstract class BasePanel<T> : MonoBehaviour where T : class
{
//单例模式
private static T instance;
public static T Instance => instance;
protected virtual void Awake()
{
//转类型
instance = this as T;
}
protected virtual void Start()
{
//初始化 主要用于 监听按钮等事件
Init();
}
/// <summary>
/// 方便子类继承时 进行初始化操作
/// 只要子类在其中写一些初始化逻辑
/// 最终都会在Start里面执行
/// 子类就不太需要去写Start函数了
/// </summary>
public abstract void Init();
/// <summary>
/// 显示自己
/// 写成虚函数的目的 是方便拓展 可能子类面板 需要在显示 或者隐藏自己时
/// 做一些额外操作 那么你可以在子类去重写 这两个函数 达到目的
/// </summary>
public virtual void ShowMe()
{
this.gameObject.SetActive(true);
}
/// <summary>
/// 隐藏自己
/// </summary>
public virtual void HideMe()
{
this.gameObject.SetActive(false);
}
}
TipPanel
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//提示面板
public class TipPanel : BasePanel<TipPanel>
{
//确定按钮
public UIButton btnSure;
//显示的提示信息
public UILabel labInfo;
public override void Init()
{
//写初始化逻辑
//确定按钮点击后要做什么
btnSure.onClick.Add(new EventDelegate(() =>
{
//隐藏自己
HideMe();
}));
//一开始 就把自己隐藏了 等待别人使用自己
HideMe();
}
/// <summary>
/// 改变提示面板 提示的内容
/// </summary>
/// <param name="info"></param>
public void ChangeInfo(string info)
{
labInfo.text = info;
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com