在自己研究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(25, 25);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;}
}

出来的效果:

转载于:https://www.cnblogs.com/sunxun/p/5066822.html

U3D 飞机大战(MVC模式)解析--面向对象编程思想相关推荐

  1. JavaScript 面向对象编程思想简介

    JavaScript 面向对象编程 JavaScript 执行过程 JavaScript 面向对象编程 面向对象介绍 什么是对象 什么是面向对象 程序中面向对象的基本体现 创建对象 简单方式 简单方式 ...

  2. JavaScript 面向对象编程思想

    JavaScript 面向对象编程思想 什么是面向对象 面向对象不是新的东西,它只是过程式代码的一种高度封装,目的在于提高代码的开发效率和可维护性. 面向对象编程 -- Object Oriented ...

  3. 基于STM32F103移植华为LiteOS_任务挂起与恢复_面向对象编程思想之按键状态机

    华为LiteOS_任务挂起与恢复_面向对象编程思想之按键状态机 因为在做华为LiteOS任务挂起和恢复需要使用到按键去触发任务挂起和恢复动作,因为我就萌发出使用状态机这种架构做一个按键检测触发.回想已 ...

  4. CoreJava学习第五课 --- 进入第二阶段:面向对象编程思想

    面向对象编程思想 1.面向过程 ​ 从计算机执行角度出发 ,代码执行过程核心为从程序的运行过程出发,构建编程思路,例: 哥德巴赫猜想 // 面向过程1 用户输入一个数n2 验证数字的正确性2.1 正确 ...

  5. 面向对象编程思想概览(一)类和对象

    一.简介 生活中有许多技巧值得我们在程序设计中模仿和借鉴.采用类的思想可以方便地把具有相同属性和方法归为一类,从而简化编程.本讲利用生活的常见示例,浅显通俗的语言,生动地介绍了面向对象编程中类与对象的 ...

  6. python完全支持面向对象编程思想_面向对象的编程思想和Python的类,访问和属性,继承...

    本文将从访问限制,属性,继承,方法重写这几个方面继续介绍面向对象的编程思想和Python类的继承. 复制代码 一.访问权限: Python中在类的内部定义属性和方法,在类的外部是可以直接调用或进行访问 ...

  7. 面向对象编程思想概览(三)继承

    一.简介 本讲以大家耳熟能详的<西游记>中的唐僧师徒四人为例,介绍了类的继承的概念和实现方法,总结了继承的特性和优点,帮助同学们理解面向对象编程中继承的用法,进而掌握面向对象程序设计的基本 ...

  8. 面向对象编程思想 以及类与对象

    一.面向对象编程思想 众所周知,我们常见的编程思想有面向过程和面向对象两种,像我们最基础的c语言,就是一种以过程为中心的编程思想,不关注具体的事件和对象而是针对于解决问题的思路和目标,这种编程思想由于 ...

  9. 面向对象编程思想及入门知识

    这几天在调程序,所以想写写自己对"面向对象编程"的一些理解,希望对打算入门计算机编程的同志们有所帮助.之前,好几个师弟问过我,C++与C有什么区别,学习面向对象语言需要掌握哪些基础 ...

最新文章

  1. Spring Initializr创建项目,利用阿里云URL解决Initialization failed for https://start.spring.io Please check URL
  2. python多线程并行编程,Python并行编程(二):基于线程的并行
  3. Spring web.xml详解
  4. Java学习笔记_选择语句
  5. 当前系统时间与服务器时间,操作系统时间和服务器时间
  6. Eclipse使用————生成Get/Set、toString快捷键(不使用鼠标)
  7. GridView的常用操作(增删改查)
  8. python简单的分析文本
  9. 运维Python大全
  10. 产品经理,没有那么牛逼
  11. Arcgis数据集如何以线性单位做投影
  12. [BeiJing2006]狼抓兔子
  13. 如何写软件概要设计?
  14. 外汇EA真的有用吗?外汇EA如何设置
  15. linux主分区和逻辑分区
  16. WPF 从 dotnet core 3 到 dotnet 5 的变更
  17. 宋红康老师JVM课程学习笔记
  18. EF BB BF 文本文件开头 iniparser
  19. python爬虫快速添加请求头、随机生成user-agent
  20. docker配置python环境_PyCharm使用Docker镜像搭建Python开发环境

热门文章

  1. MariaDB 求和,最大值,最小值,平均数
  2. 深入浅出SharePoint2013——获取Application Pool的id和name对照表
  3. twemproxy 简介
  4. XML 命名空间(XML Namespaces)介绍以及节点读取方法
  5. 在OpenCV环境下写的灰度图像二维傅里叶换,幅值计算,频谱平移和将数值归一化到0到255区间的四个函数
  6. linux进程--虚拟地址空间布局(十一)
  7. linux 虚拟网络设备详解(四)
  8. python统计代码行数
  9. 台式计算机攒机报告,计算机装机报告.doc
  10. 窗口最小化之后没有图标