小言_互联网的博客

Unity ❉ 基础知识 ☀️| 学会这些Unity常用组件,我离开发⭐️3A游戏大作⭐️又近了一步!(^_−)☆

296人阅读  评论(0)

📢前言

之前发了两篇博客是简单介绍了下Unity的实用知识点简单使用布局


💓💗❤️ Unity ❉ 基础知识 ☀️| 学会这些Unity实用知识点,我也可以做小游戏啦!(^_−)☆
💝💘💖 Unity ❉ 基础知识 ☀️| 轻松学会 Unity界面布局和简单实例——入门级!(^_−)☆


那本篇博客来简单介绍一下Unity中一些组件的介绍 🎅


🌎简介

组件是在游戏对象(Game Object)中的实现某些功能的集合
无论是模型、 GUI、灯光还是摄像机,所有游戏对象本质上都是一个空对象挂载了不同类别的组件,从而让该游戏对象拥有不同的功能。

简单说一下Unity开发的框架:项目—>场景—>游戏对象—>组件—>属性

一个游戏由多个场景(Scene)组成
一个场景由多个游戏物体(GameObject)组成
一个游戏物体由多个组件(Component)组成

对于一个空游戏对象来说,如果为其添加一个摄像机组件,那么该对象就是一架 摄像机;
如果为其添加了网格过滤(Mesh Filter)组件,那么该对象就是一个模 型;如果为其添加了灯光组件,该对象就是一盏灯光。
脚 本 \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中的脚本也算是组件的一种,可以挂在游戏物体上,同时也是有限制的,并不是所有的脚本都可以挂到对象上面的
关于脚本这部分会再写一篇文章单独详细介绍,这里就简单提及一下好啦
可以先看下图简单了解下


😽添加、获取和销毁组件的方法

既然简单提到脚本了,那就正好先说一下怎样在脚本中添加、获取和销毁组件的方法吧
添加组件

GameObject Cube= GameObject.CreatePrimitive(PrimitiveType.Cube);//创建一个方格
Cube.AddComponent<BoxCollider>();//添加盒形碰撞器组件
Cube.AddComponent<Rigidbody>();//添加刚体组件
Cube.AddComponent<Test>();//添加Test脚本

获取组件

BoxCollider boxCollider = Cube.GetComponent<BoxCollider>();//获取盒形碰撞器组件
Rigidbody rigidbody = Cube.GetComponent<Rigidbody>();//获取刚体组件
Test test= Cube.GetComponent<Test>();//获取某个Test脚本

GetComponent
GetComponents

GetComponentInChildren
GetComponentsInChildren

GetComponentInParent
GetComponentsInParent

销毁组件

//()中的参数为创建相应组件时的组件名称
Destroy(boxCollider );//销毁盒形碰撞器组件
Destroy(rigidbody);//销毁刚体组件


💬总结

本篇博客对于Unity中几种最常见和最常用的组件做了一个介绍
当然在Unity中的组件数不胜数,都是对应相应的功能需求来做的,在这里就不对赘述了,以后用得到再单独介绍也不迟

如果觉得有用可以给个三连支持一下呀~奥力给!


转载:https://blog.csdn.net/zhangay1998/article/details/117044525
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场