在unity的player角色控制中实现MVC模式

来源:互联网 发布:2016淘宝新店如何运营 编辑:程序博客网 时间:2024/05/23 23:00

开始的话

  最近在做的一个小型RPG项目时遇到的问题是,UI的MVC比较好实现,但是主角player和敌人Enemy这些游戏角色写的代码比较分散。因为一下几点,对这个项目的player重构。
  1、游戏开发中要做某种程度的分离代码逻辑,可以提高代码的可维护性和重用性。
  2、不同的组件共享同一套逻辑代码。

理论实现

   一开始做法是,把角色动画和角色方向、角色移动这些各成一个类,分别是AnimationtController、dirController、moveController,每个control的动作作为一个类,一个类只做一件事。有什么方法可以在角色中也实现MVC呢。


游戏中的角色实现MVC结构
  (1) Character Manager 包含这个角色的controller(s)
  (2) Controller 利用Model来处理角色在这个游戏中某一个状态的逻辑,一个Controller可有几个Model
  (3) Model 负责特定一个功能,可以重复使用
如图所示:


  Manager类和Model类继承monoBehavior,直接拖拽到主角身上,在Inspector面板上调节参数。Character Manager类负责管理全部controller,每个controller都有一个或几个model。




  举个例子:一个状态机有几个状态State,也就是对应了几个controller,一个State可以包含几个model,比如moveState就可以包含moveModel和commonModel,moveModel专门负责角色的移动,idleModel则负责主角的表现,比如动画、旋转、位置等等,idleModel也可看作为CommonModel,因为基本每个controller都要包含idleModel。
如图所示:



Manager类有一个字典dictionary专门储存用户输入和游戏里面的信息,供characterManager使用,让他决定是否需要更换状态(即更换controller),例如在角色控制时按左键,向左行动的信息会写在dictionary中,通过FSM的转换机制,从idleState转换成moveState。这样,往左的信息可以是从InputManager那里得来,也可以从AI Manager那里得来,我们的目标也就实现了,以后有类似的角色时,可以供用这套框架,只要把Model写好就可以拼进去这个框架里面。
如图所示:
 

结束(还没结束)
  到现在为止,我们的目标已经实现了,这个框架也已经搭建好了,但是这只是在理论上实现而已,接下来会专门写一篇代码实现的文章来实现这个框架。







2 0
原创粉丝点击