Unity组件
在学习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组件的更多相关文章
- 王者荣耀是怎样炼成的(三)unity组件与脚本
转载请注明出处:http://www.cnblogs.com/yuxiuyan/p/7565345.html 上回书说到了unity的基本操作.这回我们来侃侃unity中的组件与脚本. 目录结构 一. ...
- 如何理解Unity组件化开发模式
Unity的开发模式核心:节点和组件,组件可以加载到任何节点上,每个组件都有 gameobject 属性,可以通过这个属性获取到该节点,即游戏物体. 也就是说游戏物体由节点和组件构成,每个组件表示物体 ...
- Unity 组件
组件(Component)这个概念最早是在2005年<Game Programming Gems 5>的<Component Based Object Management>中 ...
- unity组件路径自动生成
unity 有时候找路径太麻烦 写了一个自动生成脚本的工具 using System.Collections.Generic; using System.IO; using System.Text; ...
- Unity 组件.name
组件.name 指的是组件所在游戏对象的名字,例如: Animation m_animation; m_animation =GetComponent<Animation>(); m_a ...
- Unity 组件的增、查、禁、删 代码书写
using UnityEngine; public class NewBehaviourScript : MonoBehaviour { // Use this for initialization ...
- Unity 组件不常用知识备注
Rigidbody(刚体) Interpolate:当物体进行不规则移动时,通过上一帧的行为来进行平滑移动 Extrapolate:通过推算下一帧的行为来进行平滑移动 PhysicMaterial(物 ...
- unity 组件开发
//在unit菜单加入Component->b2Components->b2BodyComponent [AddComponentMenu("b2Components/b2Bod ...
- 我心中的核心组件(可插拔的AOP)~第十二回 IoC组件Unity
回到目录 说在前 Ioc组件有很多,之前也介绍过autofac,castle等,今天再来说一下在微软Nlayer DDD架构里使用的unity组件,今天主要说一下依靠注入,如果希望看拦截的用法,可以阅 ...
随机推荐
- EF CODEFIRST WITH ORACLE
摸索了半天,运行通过了,但是还是有一点坑的,对于初次使用的人来说,可能会遇到几个问题 首先安装两个dll 如果你已经下载好了dll Oracle.ManagedDataAccess.dll Oracl ...
- Solr5.5.3的研究之路 ---1、从Mysql导入数据并创建索引
公司需要用到全文检索,故使用Solr,也是新人一枚,本人查看的前提是Solr已经安装部署成功,我用的服务器是自带的Jetty 1.创建Collection [root@whoami bin]# ./s ...
- BST树、B-树、B+树、B*树
BST树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: ...
- C++中cin.get(),cin.getline(),cin>>,gets(),cin.clear()使用总结
1.cin.get() 实质:类istream所定义对象cin的重载成员函数 用于读取单字符 istream& get(char&) int get(void) 用于读取字符 ...
- JavaScript基础笔记集合(转)
JavaScript基础笔记集合 JavaScript基础笔记集合 js简介 js是脚本语言.浏览器是逐行的读取代码,而传统编程会在执行前进行编译 js存放的位置 html脚本必须放在&l ...
- java Swing 练习
import javax.swing.JFrame; public class Swingtest { static final int WIDTH = 500; static final int H ...
- ruby 类方法、实例方法、类变量
###################### #类变量 ###################### class Cloud @@count=0 def initialize(user,passwor ...
- 【Boost】boost库中timer定时器 2
博客转载自:http://blog.csdn.net/yockie/article/details/40386145 先跟着boost文档中asio章节的指南中的几个例子学习一下使用: 所有的Asio ...
- Luogu 2322 [HNOI2006]最短母串问题
唔,太菜了,弄了好几个小时. 状压dp,设$f_{s, i}$表示选了集合$s$,以$i$结尾的最短长度,设$g_{i, j}$表示串$i$的后缀和串$j$的前缀的最长匹配长度. $f_{s, i} ...
- tab下拉菜单
这个想法早就有的 (写tab下拉菜单)就觉得自己对js不是很熟 所以一直没有写 花了不少时间 <!DOCTYPE html> <html> <head> < ...