在自己研究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. 【腾讯内部干货分享】分析Dalvik字节码进行减包优化

    http://wetest.qq.com/lab/view/?id=96?from=ads_test2_qqtips&sessionUserType=BFT.PARAMS.192184.TAS ...

  2. css margin的相关属性,问题及应用

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=48 引言:margin ...

  3. C++学习笔记之作用域为类的常量和作用域内的枚举

    一.作用域为类的常量 有些情况下,使符号常量的作用域为类很有用.如,类声明(不是定义)可能使用字面值30来指定数组长度,由于该常量对于所有对象来说都是相同的,因此创建一个由所有对象共享的常量是个不错的 ...

  4. ZooKeeper是什么?

    What is ZooKeeper? (译:什么是ZooKeeper?) ZooKeeper is a centralized service for maintaining configuratio ...

  5. Class hierarchy of UIResponder as well as subclasses of UIView and UIControl

    When you were dragging in your label and your button to this view, you were adding them as subviews. ...

  6. 网站性能扩展案例:每天30-50亿请求,300K QPS是如何炼成的

    Reduce Data广告服务网站(http://reducedata.com)如何扩展到每天300K QPS请求?分享经验如下: 1. 为大规模而设计,广告服务平台从一开始增长就很惊人,因此,系统开 ...

  7. 排版系统Latex傻瓜方式使用(论文排版)

    0. 什么是Latex? LaTEX(英语发音:/ˈleɪtɛk/ lay-tek或英语发音:/ˈlɑːtɛk/ lah-tek,音译"拉泰赫").文字形式写作LaTeX.是一种基 ...

  8. mobile响应式页面meta信息相关记录

    <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scal ...

  9. 特殊IP地址

    主机ID全为0:不分配给任何主机,仅用于表示某个网络的网络地址. 主机ID全为1:不分配给任何主机,仅用做广播地址. IP地址的32位全为1:即255.255.255.255,为有限广播地址(http ...

  10. 解决ajax.net 1.0中文乱码问题!

      在使用ajax.net的UpdatePanel的时候,当requestEncoding编码为GB2312的时候,出现乱码.如果要解决这个问题最简单的就是改用utf-8了,但是原来使用GB2312, ...