Unity_C#之MVC设计模式

原本不打算写这篇文章的,毕竟我自己只是个半吊子,对于设计模式也没有太深入的了解,就怕引导新手误入歧途。不过仔细一想这样说不定可以让后来人少踩一些坑,倒也还算可以。

  • 什么是MVC设计模式?
    MVC就是Model-View-Controller的简称,它主要的作用是将数据(Model)与表现(View)这两个模块分开,让逻辑(Controller)作为中间层进行一个承上启下的作用。而采用此设计模式写出来的代码逻辑会比较清晰,不至于隔一段时间自己都看不懂自己的代码了。

  • Model——模型层,更确切的说应该是数据层,在这一层面我们只需要定义各种数据。

  • View——视图层,也就是表现层,我们在游戏里所能看得到的各种UI等,就归属于这一层面管辖,同时他还是一个事件派发器,所有的事件应当由这里注册进Controller。

  • Controller——控制层,应该叫逻辑层,这里主要负责各种逻辑的实现。

  • 说一下主要流程,View就是我们玩家所能看得到的,所以玩家所有的操作入口就在这里,当玩家进行操作之后,View会先通知Controller,然后由Controller去改变Model里的数据,而Model里的数据发生了改变就会自动触发事件并通知View改变UI上的显示。

  • 话不多说,我们开始实际演示:
    首先我们先搭建一个简易的UI,如下图所示:
    在这里插入图片描述

  • 很简单,就几个Button加一些Slider以及Text和Image,然后我们再根据我们搭的UI去写Model层定义数据(实际项目中这里是反过来的,要根据数据搭UI,当然UI搭成啥样也不归我们程序管,你们可别跟我一样,在小公司里面策划,美工,程序的活都包揽了,尽量还是要进成熟的公司):

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

public class PlayerData_Model
{
   
    //单例
    private static PlayerData_Model instance;
    public static PlayerData_Model GetModel()
    {
   
        if (instance == null)
        {
   
            instance = new PlayerData_Model();
        }
        return instance;
    }
    private PlayerData_Model() {
    }
    //玩家数据
    //头像
    private string playerHead;//头像数据
    public delegate void ChangePlayerHead(string newHead);
    public ChangePlayerHead changePlayerHead;//委托
    public string PlayerHead//属性
    {
   
        get 
        {
   
            return playerHead; 
        }
        set 
        {
   
            playerHead = value;
            if (changePlayerHead != null)
            {
   
                changePlayerHead.Invoke(playerHead);
            }
        }
    }
    //名称
    private string playerName;
    public delegate void ChangePlayerName(string newName);
    public ChangePlayerName changePlayerName;
    public string PlayerName
    {
   
        get
        {
   
            return playerName;
        }
        set
        {
   
            playerName = value;
            if (changePlayerName != null)
            {
   
                changePlayerName.Invoke(playerName);
            }
        }
    }
    //称号
    private string playerTittle;
    public delegate void ChangePlayerTittle(string newTittle);
    public ChangePlayerTittle changePlayerTittle;
    public string PlayerTittle
    {
   
        get
        {
   
            return playerTittle;
        }
        set
        {
   
            playerTittle = value;
            if (changePlayerTittle != null)
            {
   
                changePlayerTittle.Invoke(playerTittle);
            }
        }
    }
    //等级
    private int playerLevel;
    public delegate void ChangePlayerLevel(int newLevel);
    public ChangePlayerLevel changePlayerLevel;
    public int PlayerLevel
    {
   
        get
        {
   
            return playerLevel;
        }
        set
        {
   
            playerLevel = value;
            if (changePlayerLevel != null)
            {
   
                changePlayerLevel.Invoke(playerLevel);
            }
        }
    }
    //生命值
    private int playerHP;
    public delegate void ChangePlayerHP(int newHP);
    public ChangePlayerHP changePlayerHP;
    public int PlayerHP
    {
   
        get
        {
   
            return playerHP;
        }
        set
        {
   
            playerHP = value;
            if (changePlayerHP != null)
            {
   
                changePlayerHP.Invoke(playerHP);
  
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值