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

原创 2015年11月18日 08:32:44

开始的话

  最近在做的一个小型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写好就可以拼进去这个框架里面。
如图所示:
 

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







浅谈unity3d中使用MVC框架模式

http://www.narkii.com/club/thread-341179-1.html

Unity3D对象池技术(ObjectPool)小例子

ObjectPool 对象池脚本这里面用继承单例框架脚本,此脚本在我的另一篇博客上单例框架脚本using UnityEngine; using System.Collections; using Sy...

Unity Player角色移动控制脚本实现

1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position。这次测试了平时常用API的脚本,每个脚本均手打测试可用. 2. 通过Tra...

SURVIVAL SHOOTER TUTORIAL之为Player添加控制角色运动的脚本 [3]

基于上一篇文章的准备工作,在这篇文章中,为Player Character添加移动的脚本。在脚本中,分别写了控制角色移动的函数、控制角色旋转以及设置角色启用动画的函数。...
  • iFuMI
  • iFuMI
  • 2016年04月26日 11:30
  • 629

ASP.net MVC 基于角色的权限控制系统的实现

一、引言 我们都知道ASP.net mvc权限控制都是实现AuthorizeAttribute类的OnAuthorization方法。 下面是最常见的实现方式: public ...

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(23)-权限管理系统-角色组模块

系列目录 距离上次发布22讲已经有少许日子了,真是太抱歉,最近年关项目比较急,时间太紧,没有时间发布.请大家见谅 接下来我们的目标是 角色组管理 角色组权限设置 用户管理 把角色组授权...
  • ymnets
  • ymnets
  • 2016年02月22日 12:57
  • 760

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(26)-权限管理系统-分配角色给用户

系列目录 由于之前做了将权限赋给角色,还需要做将角色组赋给用户,和将用户赋给角色组,一个用户可以拥有多个角色组,一个角色组包含多个用户,打开模块管理,添加一个分配的操作码 并在 角色权限...
  • ymnets
  • ymnets
  • 2016年02月22日 12:58
  • 871

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(24)-权限管理系统-将权限授权给角色

系列目录 过了个年回来,回顾一下,我们上次讲了角色管理,我们这一次来讲将权限授权给角色,这一节也是大家比较关心的。因为我们已经跑通了整个系统,知道权限的流转,我们先来看一张图 这张图主要分要3...
  • ymnets
  • ymnets
  • 2016年02月22日 12:58
  • 470

Unity实现第三人称角色控制

摄像机的控制:(挂载在摄像机的第一个父物体上) public class CameraCtrl : MonoBehaviour {     public GameObject rotateY;    ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在unity的player角色控制中实现MVC模式
举报原因:
原因补充:

(最多只允许输入30个字)