Unity中简单的Mvc架构(上)

5 篇文章 0 订阅
4 篇文章 0 订阅

#如何运用mvc到自己的unity项目中呢?好的我们现在就来学习学习
1.So first of all, what do you know about MVC?
咳咳,不秀英文了,首先你得知道什么是mvc,顾名思义,mvc被分作三层,model层,view层,control层,如果你之前搞过javaweb,那么你可能会知道一个spring mvc,通过依赖注入,来生成对应m层,v层和c层进行开发,当然我们这里不会利用spring,首先在unity开发无需要spring这个偏前端的工作能够前后端分离的步骤,所以我们只需要把这个玩意进行简化,简化,再简化,我们给它起个名字,Simple Mvc。
可是,听上去还是很高端呀,别急,先听我慢慢道来!
一个大的项目如果分成几个人来做,那么每个人所开发的均就是一个模块,那么如果有A,B,C三个程序员。他们分别也做对应的模块,比如A程序员做交互系统。B程序员做物品栏界面,C程序员做开始菜单界面,那么出现这种情况会发生什么呢?
1.C程序员所做的开始菜单进入游戏,生成游戏player对象交予A,A触碰物体进行调度交予B,B调度物品,如果使用可能要调度单位的动作,所以要给A一个接口,如果涉及保存还得给C一个接口。那么这个中途就会出现多次频繁的调度了。
那么就会出现下图这个情况

Programmer开发功能调度
陈A移动交互 aa-b,a-c
王B菜单物品 bb-a,b-c
姜C游戏UI cc-a,c-b

那么我的妈呀,不久频繁触发abc到处乱调用了嘛,如果没有mvc这个结构的话,如果那个程序员是个傻13,不就整个程序都报错了嘛。其他程序员又没有接触过其他人的开发,整个项目就完蛋拉!
##所以,mvc应运而生,它就是god降生下来拯救这些企业,噢不,是拯救程序员
如果大家接触过设计模式相关的书,可能会听说工厂模式和生产者呀,以及观察者这些模式,当然如果大家没接触过也无所谓,其实这里面涉及到一个中间层的观念,也就是创造一个中间的层次来控制这三个人开发的相互调用,这样就算哪一个人代码有bug,其他人也不会因此报错,而手足无措。那么经过这个中间层之后调度模式是怎么样的呢?

Programmer开发功能调度
陈A移动交互 aa-中间层-?
王B菜单物品 bb-中间层-?
姜C游戏UI cc-中间层-?

好啦,概念性的东西就跟大家讲完拉。现在我们现在可以从理论来出发了。前面说的如果没看懂其实也无所谓拉。
首先我们需要设计一个Controller类,用来调度model类和View类。众所周知,model是数据相关的类,Controller类是用来进行扮演中间层。通过传入model到controller相应去修改view。
我们先来设计Controller。我们需要用到设计模式的思想,任何对象都可以用一层封装,所以我们设计一个ICommand接口类
这个类顾名思义,也就是掌管所有可执行命令的封装。比如增加物品,减少物品,显示物品栏等等等等,那么就不说废话,直接来写我们这个类吧

using System;
using System.Collections.Generic;

public interface ICommand
{void Excute(INotifier inotifier);

}

我们可以看到这个类里面只有一个方法,这个方法便是执行当前命令类的命令。因为每个命令肯定需要传递一个信息,我们接着把这个信息也给封装起来,也就是INotifier 类/
所以,我们不气不馁,接着来写下一个类
INotifier.cs类

using System;
using System.Collection.Generic

public class INotifier
{ public string msg;
public object body;// 可以传递任何类型的信息。运用拆包装包的思想
public string sender;//标记类
}
public INotifier(string msg,object body,string sender)
{ this.msg=msg;
this.body=body;
this.sender=sender;}
public INotifier(string msg,object body)
//省略无数不同参数的构造方法

好了,那么我们这个消息类也写完了,那我们现在就可以实现最为重要的command类了

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

using UnityEngine;
public class controller  {
	private Dictionary<string,ICommand> CommandFlow;
	// Use this for initialization
	public controller()
	{
		CommandFlow = new Dictionary<string, ICommand> ();
	}
	public void AdjustCommand(string msg,ICommand i)
	{
		if (!CommandFlow.ContainsKey (msg)) {
			CommandFlow.Add (msg, i);
		
		}

	}
	public void Excute(Observer o)
	{
		if (CommandFlow.ContainsKey (o.msg)) {
			CommandFlow [o.msg].Excute(o);
		
		}

	}

}

这里面就覆盖了这其中的核心思想,用一个字典存储对应的Icommand类,然后通过字典add,和对应检索找到icommand抽象类的对应具体,然后执行excute方法即可。
之后的view层和model层也都可以用到这样的思想,具体是怎么样,那我们下回再说!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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结构需要开发者具备一定的软件架构和代码编写能力,但是它可以提高代码的可读性和可维护性,帮助开发者开发更加健壮和可扩展的游戏应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值