【Unity 26】 Unity的UI基础2 (InputField,DropDown, 页面跳转MVC)

PS:本系列笔记将会记录我此次在北京学习Unity开发的总体过程,方便后期写总结,笔记为日更。
笔记内容均为 自己理解,不保证每个都对

Part 1 InputField:文本输入框

在这里插入图片描述
创建后的文本包括:
在这里插入图片描述

文本输入框属性:
在这里插入图片描述
输入框文本规范:
在这里插入图片描述
例如:文本规范为密码,则显示效果为
在这里插入图片描述

获得输入内容的方式:

//结束编辑后获取
        InputField input = gameObject.GetComponent<InputField>();
        input.onEndEdit.AddListener((x) => {
            Debug.Log("name == " + gameObject.transform.name + "Key == " + x);
        });
        //其他 获取情况 更改  onEndEdit方法即可
        //  Addlistener(方法)  方法可另外写,也可用Lamda表达式写

Part 2 DropDown下拉框:

在这里插入图片描述
Item:
后面每一个选项 都从这 复制 :

指定 选项的图片 和文字:
在这里插入图片描述
添加 或者删除 选项:
在这里插入图片描述
获得下拉框选项值的方法:

    void Start()
    {
        for (int i = 0; i < transform.childCount; i++)
        {

            Dropdown tmp = transform.GetChild(i).GetComponent<Dropdown>();

            /// 记录 当前第几个孩子
            int tmpIndex = i;

            tmp.onValueChanged.AddListener((index) => {


                Debug.Log("i==" + tmpIndex);

                Debug.Log("index ==" + index);

            });

        }
    }

Part 3 页面UI跳转 MVC:

已主菜单跳转登录界面为例:
其他界面跳转同理

MVCGenControl:存储界面是否已经生成

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

public class MVCGenControl : MonoBehaviour
{
    // Start is called before the first frame update

    GameObject LoginObj = null;     //纪录登陆界面是否生成
    GameObject RewardsObj = null;       //记录奖杯界面是否生成
    GameObject StoreObj = null;     //记录商店界面是否生成
    GameObject SettingObj = null;       //记录设置界面是否生成
    GameObject MailObj = null;      //记录邮件界面是否生成
    GameObject RegistObj = null;        //记录注册界面是否生成
    GameObject MenuObj = null;      //记录菜单界面是否生成

    public GameObject GetLogin
    {
        get
        {
            return LoginObj;
        }
        set
        {
            LoginObj = value;
        }
    }

    public GameObject GetRewards
    {
        get
        {
            
            return RewardsObj;
        }
        set
        {
            RewardsObj = value;
        }
    }

    public GameObject GetStore
    {
        get
        {
            return StoreObj;
        }
        set
        {
            StoreObj = value;
        }
    }

    public GameObject GetSetting
    {
        get
        {
            return SettingObj;
        }
        set
        {
            SettingObj = value;
        }
    }

    public GameObject GetMail
    {
        get
        {
            return MailObj;
        }
        set
        {
            MailObj = value;
        }
    }

    public GameObject GetRegist
    {
        get
        {
            return RegistObj;
        }
        set
        {
            RegistObj = value;
        }
    }

    public GameObject GetMenu
    {
        get
        {
            return MenuObj;
        }
        set
        {
            MenuObj = value;
        }
    }

    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}


MVCMenuTest:主菜单脚本

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


public class StartTestM
{

}

public class StartTestC
{
    StartTestM stm;
    Transform root;
    MVCGenControl GCL;


    public StartTestC(StartTestM stm, Transform root)       //实例化逻辑层
    {
        this.stm = stm;
        this.root = root;
       
        GCL = root.root.Find("GenControl").GetComponent<MVCGenControl>();       //获得记录信息
    }

    public void ShowOrHide(bool isShow)     //显示与隐藏
    {
        root.gameObject.SetActive(isShow);
    }




    public void PlayBtnClicked()        //开始按钮被按下
    {
        if (GCL.GetLogin == null)       //登陆界面未生成
        {
            Object tmp = Resources.Load("Login");       //加载登录界面
            GCL.GetLogin = GameObject.Instantiate(tmp) as GameObject;       //实例化界面

            GameObject Canvas = GameObject.FindGameObjectWithTag("MainCanvas");     //获得主画布信息

            GCL.GetLogin.transform.SetParent(Canvas.transform, false);      //设置父类

            GCL.GetLogin.AddComponent<MVCLoginTest>();      //动态添加脚本
        }

        MVCLoginTest MLT = GCL.GetLogin.GetComponent<MVCLoginTest>();       //访问登录界面的脚本
        MLT.ShowOrHidden(true);     //显示登录界面
        ShowOrHide(false);      //隐藏当前界面

    }


    public void SettingBtnClicked()     //设置按钮被按下                 以下内容同上
    {
        if(GCL.GetSetting == null)
        {
            Debug.Log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            Object tmp = Resources.Load("Setting");
            GCL.GetSetting = GameObject.Instantiate(tmp) as GameObject;

            GameObject Canvas = GameObject.FindGameObjectWithTag("MainCanvas");
            GCL.GetSetting.transform.SetParent(Canvas.transform, false);

            GCL.GetSetting.AddComponent<MVCSettingTest>();
        }

        MVCSettingTest MST = GCL.GetSetting.GetComponent<MVCSettingTest>();
        MST.ShowOrHidden(true);
        ShowOrHide(false);

    }





}




public class MVCStartTest : MonoBehaviour
{

    public StartTestM STM;
    public StartTestC STC;

    public void ShowOrHidden(bool isShow)
    {
        STC.ShowOrHide(isShow);
    }


    // Start is called before the first frame update
    void Start()
    {
        STM = new StartTestM();
        STC = new StartTestC(STM, transform);

        Transform Play = transform.Find("Buttons/Play");
        Button playBtn = Play.GetComponent<Button>();
        playBtn.onClick.AddListener(STC.PlayBtnClicked);        //调用 开始按钮被按下的方法


        Transform Setting = transform.Find("Buttons/Setting");
        Button settingBtn = Setting.GetComponent<Button>();
        settingBtn.onClick.AddListener(STC.SettingBtnClicked);      //调用 设置按钮被按下的方法

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

MVCLoginTest:登录界面脚本

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


public class TestM
{
    public string userName;
    public string passWord;
}

public class TestC
{
    TestM tmpM;
    Transform root;
    MVCGenControl GCL;

    public TestC(TestM tmpM, Transform root)
    {
        this.tmpM = tmpM;
        this.root = root;

        GCL = root.root.Find("GenControl").GetComponent<MVCGenControl>();
    }

    public void OnUserEndEdit(string UserName)      //保存用户信息
    {
        tmpM.userName = UserName;
        Debug.Log("MVC UserName == " + tmpM.userName);
    }

    public void OnPassEndEdit(string passWord)      //保存密码
    {
        tmpM.passWord = passWord;
        Debug.Log("MVC PassWord == " + tmpM.passWord);
    }

    public void ShowOrHidden(bool isShow)       //显示与隐藏
    {
        Debug.Log("root name == " + root.transform.name);
        root.gameObject.SetActive(isShow);
    }

  

    public void RegistBtnClicked()      //注册按钮被按下
    {
        //Debug.Log("RegistObj == " + registObj);
        if(GCL.GetRegist == null)       //判断regist界面是否生成过
        {


            //Debug.Log("123456789");
            Object tmp = Resources.Load("Regist");      //加载注册界面
            GCL.GetRegist = GameObject.Instantiate(tmp) as GameObject;      //实例化界面

            GameObject Canvas = GameObject.FindGameObjectWithTag("MainCanvas");     //获得主画布信息

            GCL.GetRegist.transform.SetParent(Canvas.transform, false);     //将实例化后的UI设为Canvas的子类

            GCL.GetRegist.AddComponent<MVCRegisterTest>();      //动态添加脚本

            Debug.Log("registObj  Name == " + GCL.GetRegist.transform.name);
        }
        Debug.Log("================================");
        GCL.GetRegist.GetComponent<MVCRegisterTest>().ShowOrHidden(true);       //注册界面显示
        ShowOrHidden(false);        //登录界面隐藏
    }



    public void LoginBtnClicked()       //登录按钮被按下       以下内容同上
    {
        //Debug.Log("RegistObj == " + registObj);
        if (GCL.GetMenu == null)       //判断regist界面是否生成过
        {


            //Debug.Log("123456789");
            Object tmp = Resources.Load("Menu");
            GCL.GetMenu = GameObject.Instantiate(tmp) as GameObject;

            GameObject Canvas = GameObject.FindGameObjectWithTag("MainCanvas");

            GCL.GetMenu.transform.SetParent(Canvas.transform, false);     //将实例化后的UI设为Canvas的子类

            GCL.GetMenu.AddComponent<MVCMenuTest>();

            //Debug.Log("registObj  Name == " + GCL.GetMenu.transform.name);
        }
        Debug.Log("================================");
        GCL.GetMenu.GetComponent<MVCMenuTest>().ShowOrHidden(true);
        ShowOrHidden(false);
    }



}






public class MVCLoginTest : MonoBehaviour
{

    TestM loadingM;
    TestC eventLogic;

    public void ShowOrHidden(bool isShow)       //显示与隐藏
    {
        Start();
        Debug.Log("Login  isShow == " + isShow);
        eventLogic.ShowOrHidden(isShow);
    }



    // Start is called before the first frame update
    void Start()
    {

        Debug.Log("MVC START SUCCESS!!!");

        loadingM = new TestM();

        //Transform root = transform.Find(transform.name);
        eventLogic = new TestC(loadingM, transform);
        //Debug.Log("transform name == " + root.name);

        Transform userField = transform.Find("InputField/UserNameField");
        InputField input = userField.GetComponent<InputField>();        

        input.onEndEdit.AddListener(eventLogic.OnUserEndEdit);      //调用用户名输入结束方法

        Transform passWordField = transform.Find("InputField/PassWordField");
        InputField passWord = passWordField.GetComponent<InputField>();

        passWord.onEndEdit.AddListener(eventLogic.OnPassEndEdit);       //调用密码输入结束方法

        Transform btn = transform.Find("Buttons/RegistBtn");
        Button registBtn = btn.GetComponent<Button>();

        registBtn.onClick.AddListener(eventLogic.RegistBtnClicked);     //调用注册按钮被按下方法


         btn = transform.Find("Buttons/LoginBtn");
        Button LoginBtn = btn.GetComponent<Button>();

        LoginBtn.onClick.AddListener(eventLogic.LoginBtnClicked);       //调用登录按钮被按下方法
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值