U3D 飞机大战(MVC模式)解析--面向对象编程思想
在自己研究U3D游戏的时候,看过一些人的简单的游戏开发视频,写的不错,只是个人是java web 开发的人,所以结合着MVC思想,对游戏开发进行了一番考虑。
如果能把游戏更加的思想化,分工化,开发便明了很多。

这是游戏开发的元素。基于面向对象开发,首先将这些游戏对象面向对象化
主角对象(GameObject):
主角移动方法(function)--通过接收键盘事件,对主角进行移动。
子弹发射方法(function)--实例化子弹,赋予子弹初始位置,调用子弹本身的移动方法。
敌人对象(GameObject):
敌人移动方法(function)--敌人初始化能够移动方法
敌人发射子弹方法(function)--隔一段事件实例化子弹,赋予子弹初始化位置,调用子弹本身的移动方法。
子弹对象(GameObject):
威力属性(property)--用来判断对被击中物体造成额度伤害。
子弹移动方法(function)--子弹具有移动方法。
一般开发,主角对象(Sprite) 里面绑定一个脚本有一个Update,基本写在Update函数里面,移动,子弹发射就能够完成,
这样,虽然能够完成想要的效果,可是,这样面向对象的思想不强,就如同,一条流水线组装一样,你一个人其实也都能够搞定,可是如果分开来,一个人一个步骤,那样就更加简单了。
模拟一个普通脚本:
public class Player : MonoBehaviour{
void Update(){
if(按下xx键){
move();
}
}
//移动函数
void move(){
}
}
也能够实现通过控制键盘,使操作游戏对象进行移动

加入MVC的思想,思路就清晰些,模型,也就是对象,就只具有对象的属性和方法,不具备实质性的行为,单纯的就是个模型罢了
视图就是游戏对象(GameObject)
模型就是该对象的属性,方法的C##文件
控制器就是对加入的一些逻辑和调用模型的类
那么模拟下代码
模型:
public class PlayerModel : MonoBehaviour{
void Update(){
}
//移动函数
void move(){
}
}
控制器:
public class PlayerAction : MonoBehaviour{
void Start(){
PlayerModel play = gameobject.GetCompent<PlayerModel>();
}
void Update(){
if(按下xx键){
play.move();
}
}
}
这样,就能够把逻辑和调用都写到控制器里面,不扰乱模型,模型就只有方法和属性,不具备具体的行为
来一个例子:

代码:PlayerAction
using UnityEngine;
using System.Collections;
/*
* Adminer:sun2955
* http:www.yinghy.com
* */
public class PlayerAction : MonoBehaviour { // 使用进行初始化
void Start () { } //每一帧都会调用该函数
void Update () {
PlayerModel player = gameObject.GetComponent<PlayerModel>();
player.Move();
}
//物理运动
void FixedUpdate()
{ }
}
PlayerAction:
using UnityEngine;
using System.Collections;
/*
* Adminer:sun2955
* http:www.yinghy.com
* */
public class PlayerModel : MonoBehaviour {
public GameObject xxx;//子弹对象
private Vector2 speed = new Vector2(, );
private Vector2 movement;
// 使用进行初始化
void Start () { } //每一帧都会调用该函数
void Update () { }
//物理运动
void FixedUpdate()
{ }
public void Move() {
float inputx = Input.GetAxis("Horizontal"); //获得水平移动
float inputy = Input.GetAxis("Vertical"); //获得垂直移动
Debug.LogError("inputx=" + inputx + "inputy=" + inputy);
movement = new Vector2(inputx * speed.x, inputy * speed.y);
if (Input.GetKey(KeyCode.K))
{
//发射子弹 实例化该子弹,得到子弹的对象,然后调用子弹的移动方法;
GameObject xxgame = GameObject.Instantiate(xxx);
xxgame.gameObject.transform.position = gameObject.transform.position;
xxgame.gameObject.GetComponent<shootscript>().move();
xxgame.gameObject.GetComponent<shootscript>().shootsound(); }
//这样可以达到物理性质的运动
gameObject.GetComponent<Rigidbody2D>().velocity = movement;
}
}
出来的效果:

U3D 飞机大战(MVC模式)解析--面向对象编程思想的更多相关文章
- Java飞机大战MVC版
PlaneWar Java飞机大战MVC版 //无聊时偷的雷霆战机素材写了一个飞机大战,本意是练习mvc,但写得还是不清晰 github下载:https://github.com/dejavudwh/ ...
- 面向对象编程思想(OOP)
本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞 ...
- 面向对象编程思想(OOP)
本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞 ...
- 面向对象编程思想(OOP)(转发)
本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞 ...
- 面向对象编程思想(OOP)总结
本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞 ...
- IT第二十天 - 面向对象编程思想、抽象类、异常处理、程序操作日志记录、本周总结 ★★★
IT第二十天 上午 面向对象编程思想 1.组装电脑的设计: (1)电脑的组成:显示器+机箱 (2)机箱的组成:电源+主板+硬盘 (3)主板所包含的部件:cpu+内存+PCI接口+usb接口 (4)PC ...
- 面向对象编程思想(前传)--你必须知道的javascript
在写面向对象编程思想-设计模式中的js部分的时候发现很多基础知识不了解的话,是很难真正理解和读懂js面向对象的代码.为此,在这里先快速补上.然后继续我们的面向对象编程思想-设计模式. 什么是鸭子类型 ...
- 面向对象编程思想(前传)--你必须知道的javascript(转载)
原文地址:http://www.cnblogs.com/zhaopei/p/6623460.html阅读目录 什么是鸭子类型 javascript的面向对象 封装 继承 多态 原型 this指向 ...
- PHP中面向对象编程思想的3个特征
面向对象编程思想的3个特征: 封装: 无非是一个大的指向思想,目的是为了将一个类设计得更为健壮! 其基本做法是: 尽可能地将一个类的成员私有化,只开放那些必不可少的对外的属性或方法,能private的 ...
随机推荐
- js ajax上传图片到服务器
$("#up_goods_pic").on('change',function(){ var file = this.files[0]; var url = webkitURL.c ...
- 剖析SSH核心原理(一)
在我前面的文章中,也试图总结过SSH,见 http://blog.csdn.net/shan9liang/article/details/8803989 ,随着知识的积累,总感觉以前说得比较笼统, ...
- linux的webserver配置与管理——创建用户个人主页
本实验用的是RedHat linux9.0,在虚拟机上进行操作,它已具有相当完好的可视化界面,这样用户会更加easy接受和理解. 首先呢就是虚拟机的相关配置,这个就不说了,当我们安装完系统后,打开终端 ...
- Codeforces Beta Round #5 E. Bindian Signalizing 并查集
E. Bindian Signalizing Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset ...
- Javascript模块化编程系列三: CommonJS & AMD 模块化规范描述
CommonJS Module 规范 CommonJS 的模块化规范描述在Modules/1.1.1 中 目前实现此规格的包有: Yabble,CouchDB,Narwhal (0.2), Wakan ...
- 虚拟机VMware 9安装苹果MAC OSX 10.8图文教程
前些天虚拟机VMware Workstation 9出来,相信大家都已经熟悉VM9了,至于MAC OSX 10.8系统,那也是出来一段时间了,本篇文章就是来讲解VMware Workstation 9 ...
- C语言中的函数
C语言中的函数 目录 概述——对函数的理解 C语言中函数的定义和声明 函数允许的参数类型 函数允许的返回类型 递归 概述 由于有些代码段在编写程序的时候经常会用到,此时我们为了减少代码文件的长度和增加 ...
- qt的安装和debug
qt-opensource-windows-x86-msvc2013_64_opengl-5.3.0 这个已经包含了qt-creator-opensource-windows-x ...
- 更换VS2012序列号的方法
转自:http://blog.sina.com.cn/s/blog_58c506600101ja49.html 今天不小心把还在试用期内的VS2012 Ultimate填上盗版Key激活了……找遍了菜 ...
- C#中的DataSet、string、DataTable、对象转换成Json的实现代码
C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// ...