⭐️组件Component
-
-
-
- ????前言
-
- ????简介
- ????Unity工程结构
- ????几种常用组件介绍
-
- ????Transform组件
- ????Mesh Filter(网格过滤器)和Mesh Renderer(网格渲染器)
- ????Collider (物体碰撞器)
- ????刚体(RigidBody)
- ????脚本
- ????添加、获取和销毁组件的方法
-
- ????总结
????前言
之前发了两篇博客是简单介绍了下Unity的实用知识点和简单使用布局
????????❤️ Unity ❉ 基础知识 ☀️| 学会这些Unity实用知识点,我也可以做小游戏啦!(^_−)☆
???????????? Unity ❉ 基础知识 ☀️| 轻松学会 Unity界面布局和简单实例——入门级!(^_−)☆
那本篇博客来简单介绍一下Unity中一些组件的介绍 ????
????简介
组件是在游戏对象(Game Object)中的实现某些功能的集合
无论是模型、 GUI、灯光还是摄像机,所有游戏对象本质上都是一个空对象挂载了不同类别的组件,从而让该游戏对象拥有不同的功能。
简单说一下Unity开发的框架:项目—>场景—>游戏对象—>组件—>属性
一个游戏由多个场景(Scene)组成
一个场景由多个游戏物体(GameObject)组成
一个游戏物体由多个组件(Component)组成
对于一个空游戏对象来说,如果为其添加一个摄像机组件,那么该对象就是一架 摄像机;
如果为其添加了网格过滤(Mesh Filter)组件,那么该对象就是一个模 型;如果为其添加了灯光组件,该对象就是一盏灯光。
代码语言:txt复制 脚 本 color{FF66FF}{脚本} 脚本在Unity中也是一种组件
????Unity工程结构
在介绍Unity的各种组件之前,先来简单介绍下Unity的工程结构
一般来说,一个Unity工程正常都会有这四个文件夹
Assets :是用来存储⼯程所需的所有资源⽂件 (必备)
Library :是⼯程所需要的所有资源库(类库)是Unity⾃动给我们⽣成的,如果一个Unity工程开发时间长了,这个文件夹可能会很大,一般来说直接删除了,工程也可以正常开发使用
ProjectSetting :是我们当前Unity工程的一些⼯程设置⽂件,就是下图上面这些设置相关就存储在这个文件夹,删除的话就要重新配置了
Temp :是临时⽂件,一般来说也没啥用,可看情况选择去留
????几种常用组件介绍
????Transform组件
Transform 是物体模型最基本的组件,基本上所有物体都有
来看看官方的介绍: The Transform component determines the Position, Rotation,and Scale of each object in the scene. Every GameObject has a Transform. The position, rotation and scale values of a Transform are measured relative to the Transform’s parent. If the Transform has no parent, the properties are measured in world space 译文: 变换组件决定场景中每个对象的位置、旋转和比例。每个游戏对象都有一个转换 变换的位置、旋转和缩放值是相对于父变换计算的。如果transform没有父物体,属性将会根据在世界空间中计算
总结一句话就是——Transform是用于控制游戏对象的位置、旋转和大小比例的
下图分别是Transform的Inspector面板属性图和各种属性
????Mesh Filter(网格过滤器)和Mesh Renderer(网格渲染器)
Mesh:是指模型的网格,建模就是建网格。细看Mesh,可以知道Mesh的主要属性内容包括顶点坐标,法线,纹理坐标,三角形绘制序列等其他有用属性和功能。因此建网格,就是画三角形;画三角形就是定位三个点。
Mesh Filter(网格过滤器):内包含一个Mesh组件,可以根据MeshFilter获得模型网格的组件,也可以为MeshFilter设置Mesh内容。
Mesh Render(网格渲染器):是用于把网格渲染出来的组件。MeshFilter的作用就是把Mesh扔给MeshRender将模型或者说是几何体绘制显示出来。
每个GameObject都可以有一个MeshFilter组件,也可以没有。如果有该组件,那么一定有Mesh属性,而且有MeshFilter的话,就必须要Mesh Renderer才能将此网格渲染出来,不然是看不见该网格的。
大概就是这么个逻辑:MeshFilter->Mesh->Mesh Renderer
????Collider (物体碰撞器)
碰撞器是Unity引擎为模拟物理效果的组件
功能:可以让两个带有碰撞器的游戏对象相互接触的时候不会穿透过去,而是会发生一个碰撞效果
一般来说创建一个物体时系统会自动匹配相应的Collider(碰撞器)
创建的时候先选中游戏对象,然后在Inspector面板上点击Add Component ,然后添加想要的碰撞器就行
选中游戏对象->Inspector面板->Add Component->(想要的组件)
(添加大部分组件都是这个流程)
碰撞器有以下几种,下面就简单介绍一下,这几种碰撞器组件属性其实都差不多,就是调整大小的时候面板属性会有所差别
1.盒碰撞器(Box Collider)
2.椭圆碰撞器(Sphere Collider)
3.胶囊碰撞器(Capsule Collider)
4.网格碰撞器(Mesh Collider)
5.车轮碰撞器(Wheel Collider)
6.地形碰撞器(Terrain Collider)
碰撞器属性介绍
属性 | 功能 |
---|---|
Edit Colloder | 手动编辑Collider |
Is Trigger | 是否为触发器 |
Material | 材质 |
Center | 碰撞器的中心点,相对于物体的自身坐标 |
Size | 碰撞器的大小 |
Radius | 碰撞器的半径大小 |
Radius | 碰撞器的半径大小 |
Height | 圆柱体高度 |
Direction | 方向 |
Mesh | 选择网格 |
????刚体(RigidBody)
上面介绍了碰撞体,这下来介绍刚体。
其实他俩都是为了模拟物理引擎效果而存在的,一般来说也会配合使用
在Unity理引擎中,使用 刚体(RigidBody) 来模拟这种物理效果.
当一个游戏对象被赋予刚体组件之后,游戏引擎就会对其进行物理效果的计算和模拟。同时我们也可以给这个对象施加各种作用力,让它运动起来。
另外如果要实现重力的效果,那么相应的游戏物体都必须附上刚体组件。
组件添加方法还是老样子,选中游戏对象->Inspector面板->Add Component->RigidBody
面板属性
属性介绍
属性 | 作用 |
---|---|
Mass | 质量质量越大,惯性越大。建议场景中的物体质量最好不要相差100倍率以上。防止两个质量相差太大的物体碰撞后会产生过大的速度,从而影响游戏性能及呈现的效果。 |
Drag | 阻力(摩擦力) 这里指的是空气阻力,属性数值影响阻碍此物体对象的直线运动的速度效果。当游戏物体受到某个作用力的时候,这个值越大越难移动。如果设置成无限的话,物体会立即停止移动 |
Angular Drag | 角阻力(旋转摩擦力) 同样指的是空气阻力,只不过是用来阻碍物体旋转的。如果设置成无限的话,物体会立即停止旋转 |
Use Gravity | 使用重力效果不勾选,则不会受到重力影响。 |
Is Kinematic | 是否符合运动学的(是否受到物理引擎的驱动)勾选后,变成不再受物理引擎的影响,改为受Transform的影响。即不再有重力,不再被碰撞等,只会呆在Transform规定的位置上不动,物体撞击时候像一堵墙一样不会倒,位置不会因碰撞而发生改变 |
Interpolate | 差值类型如果看到刚体移动的时候运动的不是很平滑,可以选择一种平滑方式。即:平滑物体运动的曲线None(无差值):不使用差值平滑Interpolate(差值):根据上一帧来平滑移动 Extrapolate(推算):根据推算下一帧物体的位置来平滑移动 |
Collision Detection | 碰撞侦测。用来改变物体碰撞检测的精度Discrete(离散):默认的碰撞检测方式。但若当物体A运动很快的时候,有可能前一帧还在B物体的前面,后一帧就在B物体后面了,这种情况下不会触发碰撞事件,所以如果需要检测这种情况,那就必须使用后两种检测方式Continuous(连续):这种方式可以与有静态网格碰撞器的游戏对象进行碰撞检测。 可以避免因物体移动速度过快而穿过另一个物体的情况Continuous Dynamic(动态连续):这种方式可以与所有设置了2或3方式的游戏对象进行碰撞检测 |
Constraints | 约束 约束位置或旋转时的x/y/z坐标,使其Freeze(冻结)。比如想控制游戏对象人物上台阶不会摔倒,或者高速碰到一个墙壁物体时不会胡乱转动的话,则要冻结x,y和z轴的旋转centerOfMass:相对于变换原点的质心angularVelocity 刚体的角速度向量,修改它可以使刚体进行旋转 |
????脚本
Unity中的脚本也算是组件的一种,可以挂在游戏物体上,同时也是有限制的,并不是所有的脚本都可以挂到对象上面的
关于脚本这部分会再写一篇文章单独详细介绍,这里就简单提及一下好啦
可以先看下图简单了解下
????添加、获取和销毁组件的方法
既然简单提到脚本了,那就正好先说一下怎样在脚本中添加、获取和销毁组件的方法吧
添加组件
代码语言:javascript复制GameObject Cube= GameObject.CreatePrimitive(PrimitiveType.Cube);//创建一个方格
Cube.AddComponent<BoxCollider>();//添加盒形碰撞器组件
Cube.AddComponent<Rigidbody>();//添加刚体组件
Cube.AddComponent<Test>();//添加Test脚本
获取组件
代码语言:javascript复制BoxCollider boxCollider = Cube.GetComponent<BoxCollider>();//获取盒形碰撞器组件
Rigidbody rigidbody = Cube.GetComponent<Rigidbody>();//获取刚体组件
Test test= Cube.GetComponent<Test>();//获取某个Test脚本
GetComponent
GetComponents
GetComponentInChildren
GetComponentsInChildren
GetComponentInParent
GetComponentsInParent
销毁组件
代码语言:javascript复制//()中的参数为创建相应组件时的组件名称
Destroy(boxCollider );//销毁盒形碰撞器组件
Destroy(rigidbody);//销毁刚体组件
????总结
本篇博客对于Unity中几种最常见和最常用的组件做了一个介绍
当然在Unity中的组件数不胜数,都是对应相应的功能需求来做的,在这里就不对赘述了,以后用得到再单独介绍也不迟
如果觉得有用可以给个三连支持一下呀~奥力给!