在自己研究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模式)解析--面向对象编程思想的更多相关文章

  1. Java飞机大战MVC版

    PlaneWar Java飞机大战MVC版 //无聊时偷的雷霆战机素材写了一个飞机大战,本意是练习mvc,但写得还是不清晰 github下载:https://github.com/dejavudwh/ ...

  2. 面向对象编程思想(OOP)

    本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞 ...

  3. 面向对象编程思想(OOP)

    本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞 ...

  4. 面向对象编程思想(OOP)(转发)

    本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞 ...

  5. 面向对象编程思想(OOP)总结

    本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞 ...

  6. IT第二十天 - 面向对象编程思想、抽象类、异常处理、程序操作日志记录、本周总结 ★★★

    IT第二十天 上午 面向对象编程思想 1.组装电脑的设计: (1)电脑的组成:显示器+机箱 (2)机箱的组成:电源+主板+硬盘 (3)主板所包含的部件:cpu+内存+PCI接口+usb接口 (4)PC ...

  7. 面向对象编程思想(前传)--你必须知道的javascript

    在写面向对象编程思想-设计模式中的js部分的时候发现很多基础知识不了解的话,是很难真正理解和读懂js面向对象的代码.为此,在这里先快速补上.然后继续我们的面向对象编程思想-设计模式. 什么是鸭子类型 ...

  8. 面向对象编程思想(前传)--你必须知道的javascript(转载)

    原文地址:http://www.cnblogs.com/zhaopei/p/6623460.html阅读目录   什么是鸭子类型 javascript的面向对象 封装 继承 多态 原型 this指向 ...

  9. PHP中面向对象编程思想的3个特征

    面向对象编程思想的3个特征: 封装: 无非是一个大的指向思想,目的是为了将一个类设计得更为健壮! 其基本做法是: 尽可能地将一个类的成员私有化,只开放那些必不可少的对外的属性或方法,能private的 ...

随机推荐

  1. [转帖]ExtJs与服务器的交互(一)

    Ext是一个非常好的Ajax框架,其华丽的外观表现确实令我们折服,然而一个应用始终离开不服务器端,因此在实现开发中我们需要对Ext与服务器端的交互技术有较为详细的了解,在开发中才能游刃有余地应用.本文 ...

  2. FlashPaper 使用经验之谈

    李志海  20101229  QQ:76855049 CSDN:资源下载地址:http://lizhihai_99.download.csdn.net/ http://download.csdn.ne ...

  3. The IAR Archive Tool—iarchive

    The IAR Archive Tool—iarchive—creates and manipulates a library (anarchive) of several ELF object fi ...

  4. ISO 9141-2 and ISO 14230-2 INITIALIZATION and DATA TRANSFER

    http://ecad.tu-sofia.bg/et/2005/pdf/Paper097-P_Dzhelekarski1.pdf INITIALIZATION Prior to any diagnos ...

  5. IAR USING PRE- AND POST-BUILD ACTIONS

    Using pre-build actions for time stamping If necessary, you can specify pre-build and post-build act ...

  6. Codeforces Round #306 (Div. 2) E. Brackets in Implications 构造

    E. Brackets in Implications Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/conte ...

  7. A. Fox and Box Accumulation

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  8. 【JavaScript】javascript常用的东西

    DOM编程.AJAX编程.异步编程(nodejs会涉及的相对多一点,事件.ajax) 函数.函数表达式.回调函数是基础. JavaScript的函数是一个核心. 回调函数有点类似于Android中的回 ...

  9. MVC4数据注释与验证 2

    Using Validation Annotations Required必须项验证属性 [Required] public string FirstName { get; set; } [Requi ...

  10. purge

    RR级别 mysql V5.6 debug ; 测试1 会话1: mysql)); Query OK, rows affected (0.04 sec) mysql,"a"); Q ...