4.常规实现主面板

4.MVC框架-不使用MVC框架-主面板


4.1 知识点

创建主面板脚本,继承 MonoBehaviour,挂载到面板预制体上

public class MainPanel : MonoBehaviour
{
}

定义控件变量外部关联

// 获得控件
public Text txtName;
public Text txtLev;
public Text txtMoney;
public Text txtGem;
public Text txtPower;

public Button btnRole;

对控件添加事件监听

void Start()
{
    // 添加事件
    // btnRole.onClick.AddListener(ClickBtnRole);

    btnRole.onClick.AddListener(() =>
    {
        // 打开角色面板的逻辑
        Debug.Log("按钮点击");
        // 显示角色面板
        RolePanel.ShowMe();
    });
}

private void ClickBtnRole()
{
    // 打开角色面板的逻辑
    // 显示角色面板
    RolePanel.ShowMe();
}

更新面板信息

// 更新信息
public void UpdateInfo()
{
    // 获取玩家数据 更新玩家信息
    // 获取玩家数据的方式 1.网络请求 2.json 3.xml 4.2进制 5.PlayerPrefs公共类

    // 通过 PlayerPrefs 来获取本地存储的玩家信息 更新到界面上
    txtName.text = PlayerPrefs.GetString("PlayerName", "韬老狮");
    txtLev.text = "LV." + PlayerPrefs.GetInt("PlayerLev", 1).ToString();

    txtMoney.text = PlayerPrefs.GetInt("PlayerMoney", 999).ToString();
    txtGem.text = PlayerPrefs.GetInt("PlayerGem", 888).ToString();
    txtPower.text = PlayerPrefs.GetInt("PlayerPower", 10).ToString();
}

面板设置成单例,显示隐藏面板

private static MainPanel panel;

public static MainPanel Panel
{
    get
    {
        return panel;
    }
}

// 动态显隐
public static void ShowMe()
{
    if(panel == null)
    {
        // 实例化面板对象
        GameObject res = Resources.Load<GameObject>("BaseFramework/UI/UGUI/Normal/MainPanel");
        GameObject obj = Instantiate(res);
        // 设置它的父对象 为 Canvas
        obj.transform.SetParent(GameObject.Find("Canvas").transform, false);

        panel = obj.GetComponent<MainPanel>();
    }
    // 如果是隐藏的形式 hide 在这要显示
    panel.gameObject.SetActive(true);
    // 显示完面板 更新该面板的信息
    panel.UpdateInfo();
}

public static void HideMe()
{
    if(panel != null)
    {
        // 方式一 直接删
        // Destroy(panel.gameObject);
        // panel = null;
        // 方式二 设置可见为隐藏
        panel.gameObject.SetActive(false);
    }
}

主入口脚本控制显示隐藏主面板

public class NormalMain : MonoBehaviour
{
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.M))
        {
            // 显示主面板
            MainPanel.ShowMe();
        }
        else if(Input.GetKeyDown(KeyCode.N))
        {
            // 隐藏主面板
            MainPanel.HideMe();
        }
    }
}

4.2 知识点代码

MainPanel

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

//1.创建脚本
public class MainPanel : MonoBehaviour
{
    //2.获得控件
    public Text txtName;
    public Text txtLev;
    public Text txtMoney;
    public Text txtGem;
    public Text txtPower;

    public Button btnRole;

    private static MainPanel panel;

    public static MainPanel Panel
    {
        get
        {
            return panel;
        }
    }


    //4.动态显隐
    public static void ShowMe()
    {
        if(panel == null)
        {
            //实例化面板对象
            GameObject res = Resources.Load<GameObject>("BaseFramework/UI/UGUI/Normal/MainPanel");
            GameObject obj = Instantiate(res);
            //设置它的父对象 为Canvas
            obj.transform.SetParent(GameObject.Find("Canvas").transform, false);

            panel = obj.GetComponent<MainPanel>();
        }
        //如果是隐藏的形式hide 在这要显示
        panel.gameObject.SetActive(true);
        //显示完面板 更新该面板的信息
        panel.UpdateInfo();
    }

    public static void HideMe()
    {
        if(panel != null)
        {
            //方式一 直接删
            //Destroy(panel.gameObject);
            //panel = null;
            //方式二 设置可见为隐藏
            panel.gameObject.SetActive(false);
        }
    }

    void Start()
    {
        //3.添加事件
        //btnRole.onClick.AddListener(ClickBtnRole);

        btnRole.onClick.AddListener(() =>
        {
            //打开角色面板的逻辑
            Debug.Log("按钮点击");
            //显示角色面板
            RolePanel.ShowMe();
        });
    }

    private void ClickBtnRole()
    {
        //打开角色面板的逻辑
        //显示角色面板
        RolePanel.ShowMe();
    }

    //4.更新信息
    public void UpdateInfo()
    {
        //获取玩家数据 更新玩家信息
        //获取玩家数据的方式 1.网络请求 2.json 3.xml 4.2进制 5.PlayerPrefs公共类

        //通过PlayerPrefs来获取本地存储的玩家信息 更新到界面上
        txtName.text = PlayerPrefs.GetString("PlayerName", "韬老狮");
        txtLev.text = "LV." + PlayerPrefs.GetInt("PlayerLev", 1).ToString();

        txtMoney.text = PlayerPrefs.GetInt("PlayerMoney", 999).ToString();
        txtGem.text = PlayerPrefs.GetInt("PlayerGem", 888).ToString();
        txtPower.text = PlayerPrefs.GetInt("PlayerPower", 10).ToString();
    }
}

NormalMain

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NormalMain : MonoBehaviour
{
    void Update()
    {
        if( Input.GetKeyDown(KeyCode.M) )
        {
            //显示主面板
            MainPanel.ShowMe();
        }
        else if( Input.GetKeyDown(KeyCode.N) )
        {
            //隐藏主面板
            MainPanel.HideMe();
        }
    }
}


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

×

喜欢就点赞,疼爱就打赏