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的 ...
随机推荐
- 也来说说C#异步委托(转)
原文地址: http://www.cnblogs.com/lxblog/archive/2012/12/11/2813893.html 前些日子,看到园子里面有人用老王喝茶的例子讲解了一下同步和异步, ...
- PostgreSQL停止动作观察
实验过程如下: 启动一个客户端: [postgres@cnrd56 bin]$ ./psql psql () Type "help" for help. postgres=# be ...
- jQuery性能优化的28个建议
我一直在寻找有关jQuery性能优化方面的小窍门,能让我那臃肿的动态网页应用变得轻便些.找了很多文章后,我决定将最好最常用的一些优化性能的建议列出来.我也做了一个jQuery性能优化的简明样式表,你可 ...
- 怎样解决VirtrualBox不能新建64bit的系统的问题
假设你的VirtrualBox不能新建64bit的虚拟机一般有以下两个原因: 1.电脑是32位的,不支持创建64bit的虚拟机 2.电脑不支持Intel VT-x,或者是Intel VT-x没有打开 ...
- Codeforces Round #337 (Div. 2) C. Harmony Analysis 构造
C. Harmony Analysis 题目连接: http://www.codeforces.com/contest/610/problem/C Description The semester i ...
- HDU 4286 Data Handler 双向链表/Splay
Data Handler Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...
- uva 387 A Puzzling Problem (回溯)
A Puzzling Problem The goal of this problem is to write a program which will take from 1 to 5 puzz ...
- linux 下cocos2dx-3.3.1环境搭建
1.安装依赖 依赖包含: libx11-dev libxmu-dev libglu1-mesa-dev libgl2ps-dev libxi-dev g++ libzip-dev libpng12-d ...
- progressBarButton
https://github.com/longtaoge/progressBarButton
- SexyProgressBar
https://github.com/sunalong/SexyProgressBar