Unity中MVC的简单应用

简介:

本篇简单介绍一下,UnityMVC框架的简单应用。MVC1982年被设计出来,至今都有着很大比重的使用率,特别是目前软件及游戏迭代此之快的情况下。高效的增删功能低耦合又小巧灵活的框架MVC,深受广大ProgramDesigner的喜爱。

cad69a0b36d48dc827edc3a677f5493e.png-wh_

数据是程序的灵魂,视图是看清灵魂的眼睛,控制器从中拨开迷雾,这就形成了现在的MVC。

69f48132fef97fcac00cbbc06f1481ed.png-wh_

简单实例:Model

using UnityEngine;

using System.Collections;

 

/// <summary>

/// 模型委托(当用户信息发生变化时执行)

/// </summary>

public delegate void OnValueChange (int val);

 

public class PlayerMsgModel

{

    //玩家等级

    private int playerLevel;

    //玩家经验

    private int playerExperience;

    //玩家升级经验

    private int playerFullExperience;

    //金币数量

    private int goldNum;

    //声明委托对象,接收当等级发生变化时,触发的事件

    public OnValueChange OnLevelChange;

    //声明委托对象,接收当经验发生变化时,触发的事件

    public OnValueChange OnExperienceChange;

    //声明委托对象,接收当升级经验发生变化时,触发的事件

    public OnValueChange OnFullExperienceChange;

    //声明委托对象,接收当金币数量发生变化时,触发的事件

    public OnValueChange OnGoldNumChange;

 

    //单例

    private static PlayerMsgModel mod;

 

    public static PlayerMsgModel GetMod ()

    {

        if (mod == null) {

            mod = new PlayerMsgModel ();

        }

        return mod;

    }

 

    private PlayerMsgModel ()

    {

    }

 

    /// <summary>

    /// 玩家等级属性

    /// </summary>

    /// <value>The player level.</value>

    public int PlayerLevel {

        get {

            return playerLevel;

        }

        set {

            playerLevel = value;

            //如果委托对象不为空

            if (OnLevelChange != null) {

                //执行委托

                OnLevelChange (playerLevel);

            }

        }

    }

 

    /// <summary>

    /// 玩家经验属性

    /// </summary>

    /// <value>The player experience.</value>

    public int PlayerExperience {

        get {

            return playerExperience;

        }

        set {

            playerExperience = value;

            if (OnExperienceChange != null) {

                OnExperienceChange (playerExperience);

            }

        }

    }

 

    /// <summary>

    /// 玩家升级经验属性

    /// </summary>

    /// <value>The player full experience.</value>

    public int PlayerFullExperience {

        get {

            return playerFullExperience;

        }

        set {

            playerFullExperience = value;

            if (OnFullExperienceChange != null) {

                OnFullExperienceChange (playerFullExperience);

            }

        }

    }

 

    /// <summary>

    /// 金币数量属性

    /// </summary>

    /// <value>The gold number.</value>

    public int GoldNum {

        get {

            return goldNum;

        }

        set {

            goldNum = value;

            if (OnGoldNumChange != null) {

                OnGoldNumChange (goldNum);

            }

        }

    }

}

简单实例:View

using UnityEngine;

using System.Collections;

using UnityEngine.UI;

 

public class PlayerMsgView : MonoBehaviour

{

    //UI

    public Text playerLevel;

    public Text playerExperience;

    public Text goldNum;

    public Button experienceUpButton;

 

    void Start ()

    {

        //委托事件绑定

        PlayerMsgModel.GetMod ().OnLevelChange += SetLevel;

        //委托事件绑定

        PlayerMsgModel.GetMod ().OnExperienceChange += SetExperience;

 

        PlayerMsgModel.GetMod ().OnFullExperienceChange += SetFullExperience;

        PlayerMsgModel.GetMod ().OnGoldNumChange += SetGoldNum;

        //View绑定按钮控制功能

        experienceUpButton.onClick.AddListener (

            PlayerMsgController.controller.OnExperienceUpButtonClick);

    }

 

    //修改UILevel值

    public void SetLevel (int level)

    {

        playerLevel.text = level.ToString ();

    }

 

    //修改UI经验值

    public void SetExperience (int experience)

    {

        //将字符串以“/”拆开

        string[] str = playerExperience.text.Split (new char []{ '/' });

        //用新的经验值重组

        playerExperience.text = experience + "/" + str [1];

    }

 

    public void SetFullExperience (int fullExiperience)

    {

        string[] str = playerExperience.text.Split (new char []{ '/' });

 

        playerExperience.text = str [0] + "/" + fullExiperience;

    }

 

    public void SetGoldNum (int goldn)

    {

        goldNum.text = goldn.ToString ();

    }

 

}


简单实例:Controller

using UnityEngine;

using System.Collections;

 

public class PlayerMsgController : MonoBehaviour

{

    public static PlayerMsgController controller;

 

    private int levelUpValue = 20;

 

    void Awake ()

    {

        controller = this;

    }

 

    void Start ()

    {

        PlayerMsgModel.GetMod ().PlayerLevel = 1;

        PlayerMsgModel.GetMod ().PlayerExperience = 0;

        PlayerMsgModel.GetMod ().PlayerFullExperience = 100;

        PlayerMsgModel.GetMod ().GoldNum = 0;

    }

 

    /// <summary>

    /// 提升经验按钮点击事件

    /// </summary>

    public void OnExperienceUpButtonClick ()

    {

        PlayerMsgModel.GetMod ().PlayerExperience += levelUpValue;

        if (PlayerMsgModel.GetMod ().PlayerExperience

            >= PlayerMsgModel.GetMod ().PlayerFullExperience) {

            PlayerMsgModel.GetMod ().PlayerLevel += 1;

            PlayerMsgModel.GetMod ().PlayerFullExperience +=

                200 * PlayerMsgModel.GetMod ().PlayerLevel;

            levelUpValue += 20;

            if (PlayerMsgModel.GetMod ().PlayerLevel % 3 == 0) {

                PlayerMsgModel.GetMod ().GoldNum +=

                    100 * PlayerMsgModel.GetMod ().PlayerLevel;

            }

        }

    }

}


 



本文转自 宁金峰 51CTO博客,原文链接:http://blog.51cto.com/13243523/1974323,如需转载请自行联系原作者

相关文章
|
6月前
|
XML 前端开发 JavaScript
Spring MVC应用的开发步骤
Spring MVC应用的开发步骤
93 0
|
7月前
|
设计模式 前端开发 Java
使用Java MVC开发高效、可扩展的Web应用
本文将介绍如何使用Java MVC(Model-View-Controller)模式来开发高效、可扩展的Web应用。我们将深入探讨MVC模式的核心概念,以及如何在Java中实现这一体系结构。通过合理地分离业务逻辑、用户界面和数据处理,我们可以构建出易于维护和扩展的Web应用程序。
|
6月前
|
JSON 前端开发 Java
构建健壮的Spring MVC应用:JSON响应与异常处理
构建健壮的Spring MVC应用:JSON响应与异常处理
35 0
|
6月前
|
存储 设计模式 前端开发
“深入理解自定义MVC:构建灵活可定制的Java应用程序”
“深入理解自定义MVC:构建灵活可定制的Java应用程序”
23 0
|
6月前
|
设计模式 前端开发 Java
JavaWeb07(MVC应用01[家居商城]&连接数据库)
JavaWeb07(MVC应用01[家居商城]&连接数据库)
|
3月前
|
存储 开发框架 前端开发
MVVM 模式与 MVC 模式:构建高效应用的选择
MVVM 模式与 MVC 模式:构建高效应用的选择
MVVM 模式与 MVC 模式:构建高效应用的选择
|
3月前
|
JSON 前端开发 Java
Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!
Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!
|
3月前
|
设计模式 前端开发 数据库
IOS开发基础知识:什么是 MVC 架构?它在 iOS 中的应用是什么样的?
IOS开发基础知识:什么是 MVC 架构?它在 iOS 中的应用是什么样的?
25 1
|
4月前
|
人工智能 自然语言处理 区块链
【Unity 3D】元宇宙概念、应用前景、价值链等概述
【Unity 3D】元宇宙概念、应用前景、价值链等概述
52 0
|
4月前
|
开发框架 数据可视化 前端开发
【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)
【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)
128 0