Unity中MVC的简单应用

model

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

/// <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 _instance;

    public static PlayerMsgModel Instance()
    {
        if (_instance == null)
        {
            _instance = new PlayerMsgModel();
        }
        return _instance;
    }

    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 System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PlayerMsgView : MonoBehaviour {

    //UI
    public Text playerLevel;
    public Text playerExperience;
    public Text goldNum;
    public Button experienceUpButton;

    void Start()
    {
        //委托事件绑定
        PlayerMsgModel.Instance().OnLevelChange += SetLevel;
        //委托事件绑定
        PlayerMsgModel.Instance().OnExperienceChange += SetExperience;

        PlayerMsgModel.Instance().OnFullExperienceChange += SetFullExperience;
        PlayerMsgModel.Instance().OnGoldNumChange += SetGoldNum;
        //View绑定按钮控制功能
        experienceUpButton.onClick.AddListener(
            PlayerMsgController._instance .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();
    }
}

 control

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

public class PlayerMsgController : MonoBehaviour {

    public static PlayerMsgController _instance;

    private int levelUpValue = 20;

    void Awake()
    {
        _instance  = this;
    }

    void Start()
    {
        PlayerMsgModel.Instance ().PlayerLevel = 1;
        PlayerMsgModel.Instance().PlayerExperience = 0;
        PlayerMsgModel.Instance().PlayerFullExperience = 100;
        PlayerMsgModel.Instance().GoldNum = 0;
    }

    /// <summary>
    /// 提升经验按钮点击事件
    /// </summary>
    public void OnExperienceUpButtonClick()
    {
            PlayerMsgModel.Instance().PlayerExperience += levelUpValue;
        if (PlayerMsgModel.Instance().PlayerExperience >= PlayerMsgModel.Instance().PlayerFullExperience)
        {
            PlayerMsgModel.Instance().PlayerLevel += 1;
            PlayerMsgModel.Instance().PlayerFullExperience += 200 * PlayerMsgModel.Instance().PlayerLevel;
            levelUpValue += 20;
            if (PlayerMsgModel.Instance().PlayerLevel % 3 == 0)
            {
                PlayerMsgModel.Instance().GoldNum += 100 * PlayerMsgModel.Instance().PlayerLevel;
            }
        }
    }
}

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: UnityMVC模式是一种用于开发游戏和应用程序的软件架构模式,其MVC代表模型-视图-控制器。这种模式通过将应用程序分离为三个互相独立的组件,以提高应用程序的可维护性、可扩展性和可重用性。 模型是Unity的数据层,这里包含了所有游戏对象的数据。游戏状态、游戏逻辑等都在模型实现。视图层负责用户界面,包括所有可触摸对象的操作、视觉效果和GUI元素。控制器实现用户输入事件的处理。一旦用户与控制器互动,控制器就会向游戏的其他部分发送消息以响应用户输入。 在UnityMVC架构通过使用一组特殊的组件将这三个部分联系起来。组件类似于对象之间的接口,它们在模型、视图和控制器之间传递消息。这些消息使得一个组件可以更新另一个组件的状态,从而使得整个应用程序变得更加强大和灵活。 总之,UnityMVC结构提供了一种能够简化大型游戏和应用程序开发的强大工具。通过将模型、视图和控制器分离为独立的组件,UnityMVC架构可以减少代码的冗余程度,提高代码的可读性和可维护性。 ### 回答2: 在UnityMVC代表的是一种软件架构模式,即Model-View-Controller,通过将应用程序分为三个主要部件,帮助开发者进行程序的管理和维护。 Model层是处理程序数据的部分,通常包括游戏世界的各种实体和数据类型。View层代表着游戏界面,在Unity可以通过Unity UI工具创建GUI样式的用户界面。Controller层则是处理输入、对象管理、流程控制等交互逻辑的部分。 在Unity使用MVC模式的好处是可以明确代码的职责和功能,分离视图与数据逻辑,增加代码的可扩展和可维护性。在处理复杂逻辑时,MVC能够清晰地定义模块,并帮助开发者更容易地组织和重用代码。同时,MVC也能够使代码分为多个部分,便于团队协作与分工。 在实现MVC模式时,Unity还提供了一些相关的功能,如通过GameObject和Component组件来实现视图和控制器的绑定,通过ScriptableObject来创建独立的数据模型,使得MVC结构更加灵活与可扩展。不过,在使用MVC模式的同时,开发者还需要注意代码的耦合度,避免过度强制组织代码结构,从而影响游戏性能和开发效率。 ### 回答3: Unity是一个非常流行的游戏引擎,MVC(模型-视图-控制器)是一种常用的软件架构模式。在Unity实现MVC结构可以有效地管理游戏对象和游戏逻辑。 MVC应用程序分为三个主要部分:模型、视图和控制器。模型表示应用程序的数据和业务逻辑,视图表示用户界面,控制器是模型和视图之间的桥梁,它处理用户输入并更新模型和视图。 在Unity,模型可以是C#脚本,它们管理游戏对象的状态和行为。视图是Unity的场景,它包含游戏对象和用户界面元素。控制器可以是用户输入或脚本,它们通过操作模型和视图来实现游戏逻辑。 实现MVC结构可以使游戏开发更加清晰和可维护。开发者可以更好地管理游戏逻辑和用户界面。例如,通过将游戏逻辑放在模型,可以使逻辑更容易测试和重用。通过将用户界面放在视图,可以更容易地更新和修改用户界面。 在Unity实现MVC结构需要开发者具备一定的软件架构和代码编写能力,但是它可以提高代码的可读性和可维护性,帮助开发者开发更加健壮和可扩展的游戏应用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值