在学习C++的时候,对于面对对象有点了解。然后也使用过一段时间的Unity,用起来还是觉得,怎么这么好用。耦合性极低。当时不知道这是基于组件编程。所以现在来学习下基于组件的知识,并比较下基于组件和基于对象的区别。

一、面对对象

   在学校,老师讲授的C++,比较核心的就是“面对对象”的思想。好比编写一个游戏,先考虑好该游戏有哪些对象,比如:玩家、敌人、道具、战斗关卡、等

  敌人和玩家都具有一些相同的属性:血量、攻击力、位置等。但是玩家除此之外还拥有金钱、装备仓库、技能。根据技能的不同,可以分为近战的战士 和 远程攻击的 法师。 玩家可以用 钱来购买装备。装备包含该装备售卖的价格和装备信息。 游戏关卡类控制战斗过程中关卡的切换。

二、组件编程

  在传统的结构设计中一般会使用“派生”来描述对象之间的关系。子类通过派生父类,来获得父类的功能。在设计游戏对象时,会根据游戏本身的需要而为游戏对象添加各种功能支持,比如渲染,碰撞,刚体,粒子系统等等。这些通用功能为了能够为各种派生类提供服务,都必须实现到基类中。这样就导致了游戏对象基类变得非常庞大臃肿,即难使用,又难维护。 ”基于组件“的对象模型就是把所有需要提供给游戏对象的基础功能都独立成单独的”组件模块“(Component),一个具体的游戏对象可以将它需要的功能模块组合到一起使用。所有”功能“不再是父类中的接口,而变成子对象实例,为游戏对象提供服务。这样既保证了功能代码的可重用性,又增加了整个对象体系的模块化和灵活度。

  我的理解:Unity把最常使用、最基本的功能以一个个组件的形式提供给开发者。比如位置、音效、渲染、碰撞等。相当于开发者建造一个房子的话,Unity直接提供了砖头、水泥、木头、门窗这些基本的物件。开发者可以像搭积木一样构造出一个个城堡。开发者充当的角色就是“胶水”,将一个个独立模块通过一定的逻辑,粘连起来,最终达到自己的项目预期目的。

三、Unity有哪些组件

   Unity3D = Gameobject + Components;Unity核心思想:一切皆组件;

  • Transform:物体的空间坐标、缩放、旋转信息
  • 灯光:点光源、方向光源、
  • 相机
  • 地形
  • 粒子系统
  • 屏幕特效
  • 网格
  • 物理引擎:重力、碰撞、刚体、射线
  • 音效、视频
  • 动画
  • AI:寻路

Component

好了,这么多组件,一个个研究透了,Unity技术也相当高了。

参考:

[1]面向对象设计与分析实例 https://www.cnblogs.com/zknublx/p/6093875.html

[2]unity3d常用组件及分析 https://www.cnblogs.com/revoid/p/6553651.html

Unity组件的更多相关文章

  1. 王者荣耀是怎样炼成的(三)unity组件与脚本

    转载请注明出处:http://www.cnblogs.com/yuxiuyan/p/7565345.html 上回书说到了unity的基本操作.这回我们来侃侃unity中的组件与脚本. 目录结构 一. ...

  2. 如何理解Unity组件化开发模式

    Unity的开发模式核心:节点和组件,组件可以加载到任何节点上,每个组件都有 gameobject 属性,可以通过这个属性获取到该节点,即游戏物体. 也就是说游戏物体由节点和组件构成,每个组件表示物体 ...

  3. Unity 组件

    组件(Component)这个概念最早是在2005年<Game Programming Gems 5>的<Component Based Object Management>中 ...

  4. unity组件路径自动生成

    unity 有时候找路径太麻烦 写了一个自动生成脚本的工具 using System.Collections.Generic; using System.IO; using System.Text; ...

  5. Unity 组件.name

    组件.name  指的是组件所在游戏对象的名字,例如: Animation m_animation; m_animation =GetComponent<Animation>(); m_a ...

  6. Unity 组件的增、查、禁、删 代码书写

    using UnityEngine; public class NewBehaviourScript : MonoBehaviour { // Use this for initialization ...

  7. Unity 组件不常用知识备注

    Rigidbody(刚体) Interpolate:当物体进行不规则移动时,通过上一帧的行为来进行平滑移动 Extrapolate:通过推算下一帧的行为来进行平滑移动 PhysicMaterial(物 ...

  8. unity 组件开发

    //在unit菜单加入Component->b2Components->b2BodyComponent [AddComponentMenu("b2Components/b2Bod ...

  9. 我心中的核心组件(可插拔的AOP)~第十二回 IoC组件Unity

    回到目录 说在前 Ioc组件有很多,之前也介绍过autofac,castle等,今天再来说一下在微软Nlayer DDD架构里使用的unity组件,今天主要说一下依靠注入,如果希望看拦截的用法,可以阅 ...

随机推荐

  1. nginx注册成服务

    http://blog.csdn.net/t37240/article/details/51727563

  2. Excel向数据库插入数据和数据库向Excel导出数据

    为了熟悉java里工作簿的相关知识点,所以找了“Excel向数据库插入数据和数据库向Excel导出数据”的功能来实现. 注意事项:1,mysql数据库: 2,需要导入的jar包有 jxl.jar,my ...

  3. 【265】shell文件创建链接

    优点:可以在其他文件夹内运行对应的*.sh文件,例如通过putty会默认进入的文件夹,可以将链接文件放在那里,就可以直接调用了! 方法:很简单 1. 在文件上点击右键>创建链接 2. 可以对下面 ...

  4. day17-jdbc 5.url介绍

    url用于标识数据库的位置,用于标识找哪个数据库. 总结:url是路径,其实就是确定是哪个数据库.用来确定我用的是哪一个数据库,并且通知我这个Connection或者是这个DriverManager获 ...

  5. Hibernate 执行sql语句返回yntax error: syntax error, expect LPAREN, actual NOT not

    hibernate自动创建表时提示 :  ERROR: sql injection violation, syntax error: syntax error, expect LPAREN, actu ...

  6. vue-resource基础介绍

    1.vue-resource 的请求api是按照rest风格设计的,它提供了7种请求api get(url, [data], [options]); head(url,[data],[options] ...

  7. ZROI2018提高day5t2

    传送门 分析 考场上傻了,写了个树剖还莫名weila...... 实际就是按顺序考虑每个点,然后从他往上找,一边走一边将走过的边染色,如果走到以前染过色的边就停下.对于每一个a[i]的答案就是之前走过 ...

  8. 炫酷实用的CSS3代码垂直手风琴菜单

    今天在微博上看到别人分享的代码,自己拿来自己保存着. 代码效果如下: 下面是源码: index.html <!DOCTYPE html> <html > <head> ...

  9. 对Spark的理解

    Spark作为一个新的分布式计算引擎正慢慢流行起来,越来越来的企业也准备用它的替换MapReduce,根据自己在工作的一些体会谈谈的优势. 分布式计算归根到底还是一个Map和Reduce操作,Map操 ...

  10. Android开发环境搭建及HelloWorld

    在开始Android开发之旅启动之前,首先要搭建环境,然后创建一个简单的HelloWorld.本文的主题如下: 1.环境搭建 1.1.JDK安装 1.2.Eclipse安装 1.3.Android S ...