18人参与 • 2025-08-17 • unity
unity 最简单的一种解释方式就是:一款跨平台的游戏引擎
游戏引擎 最简单的说法就是:帮我们集成游戏开发所需的大部分功能,在它的基础上,添加和制作游戏视觉、音效、玩法等
游戏引擎一般具有以下几个模块:1.图形;2.音频;3.物理;4.网络;5.脚本
引擎定位unity作为跨平台游戏引擎,支持2d/3d开发、vr/ar内容及数字孪生项目,2025年已迭代至2023 lts版本。
核心优势:可视化编辑器+脚本扩展,覆盖windows/macos/linux/android/ios等20+平台。
版本选择:新手建议使用unity hub安装2023.3.1f1 lts版本,兼顾稳定性与功能完整性。
开发环境配置
安装流程:通过unity hub下载编辑器时需勾选android build support模块,vs2022作为默认脚本编辑器。
工程结构:重点管理assets
(资源)、library
(编译缓存)、projectsettings
(配置)三大目录。
界面功能区
场景视图:通过wasd键移动视角,shift+鼠标右键旋转摄像机。
层级面板:支持对象拖拽排序和父子关系绑定,快捷键ctrl+d快速复制物体。
资源管理技巧
模型导入:设置lod组减少gpu负载,对非2的n次方尺寸图片启用sprite packer压缩。
脚本规范:类名需与文件名一致,使用ienumerator
实现协程避免卡顿。
模式 | 介绍 |
---|---|
2d | 使用unity内置渲染管道的2d项目。默认使用2d的项目设置,包括图像导入参数,sprite打包器,场景视图,照明和正交相机。 |
3d | 使用unity内置渲染管道的3d项目。默认使用3d的项目设置,包括2018的新功能线性颜色空间和渐进式光照贴图。 |
3dwith extras(preview) | 与3d模板类似,但包含了后处理,预设和示例内容。 |
high end(preview) | 适用于支持shader model 5.0(dx11及以上版本)的平台上的高端图形。该模板使用hd rp,一种现代渲染流水线,其中包括高级材质类型和可配置的混合tile / cluster延迟/前向照明架构 |
lightweight(preview) | 关注主要使用烘焙照明解决方案的项目。这是一个单通道前向渲染器,每个对象都有光照剔除。减少项目的绘图调用次数,使其成为低端硬件的理想解决方案。 |
lightweightvr(preview) | 开发主要使用烘焙照明解决方案的vr项目,重点关注性能 |
一个完整的 unity 项目包含以下文件
文件夹名 | 作用 |
---|---|
assets | 工程中所有资源的存放目录 |
library | unity自动生成的中间文件目录 |
packages | unity的包管理器相关文件存放目录 |
projectsettings | 工程的相关设置 |
temp | 存放一些临时文件,关闭unity会该目录会自动消失 |
sln文件和csproj文件 | unity自动生成的visual studio工程文件,用于代码编写和调试 |
注意:这些文件中,assets、packages、projectsettings三个文件夹是必须的,不能删除,其他文件可以由 unity自动生成。
在存档、拷贝工程源文件时,可以只保留 assets、packages、projectsettings 这三个文件夹来减小文件体积。
新增工程后打开工程文件夹,会发现 scenes 文件夹下有两个文件:
samplescene.unity unity引擎的场景文件,以.unity为扩展名
samplescene.unity.meta meta文件保存了对应资源的id、配置等信息,非常重要
简介
一个游戏包含多个场景(关卡),一个场景包含多个 gameobject(游戏对象)
层级窗口展示scene(场景)中所有的 gameobject(游戏对象)。这个 gameobject 可以显示出来是一个模型,也可以是一个ui元素,也可以是一个空物体
内容介绍
简介
inspector窗口类似属性窗口,可以修改、设置选中物体、资源的各种属性(把 c# 脚本添加到 componemt 里面去,脚本可以读写这些属性,脚本就是这样去实现游戏逻辑的)
使用方式
上图红框位置中有一个复选框,指示了这个物体是否是激活状态。
• 勾选:即激活状态,物体上的所有组件都会运行,简单来说物体会显示出来。
• 不勾选:即隐藏状态,物体不会显示,物体上的组件也不会运行。
修改物体的active状态的快捷键是shift + alt +a。
active状态右侧的输入框就是gameobject的名称,也是hierarchy中显示的名字。修改名称可以直接在这个输入框中修改,然后按回车确认。或者直接在hierarchy中物体上右键菜单rename或按f2(windows)重命名。
tag 即标签,你可以给一个物体添加标签用于区分不同的物体,比如用朋友和敌人来区分不同的角色。
物体的默认标签都是untagged即未贴标签。你可以自定义需要的标签内容。点击上图菜单中最下方的add tag...会弹出添加tag的窗口。
注意:每个物体只能有一个tag
layer在很多时候(摄像机、物理检测)时非常有用。
物体的默认layer都是default即默认。点击上图菜单中最下方的add layer...会弹出添加layer的窗口。
注意:
• layer不能增加,只能选择8-31之间的数字,只有24个。由于layer数量有限,在能用tag时不要使用layer。而且一定要设计分配好layer,否则后期修改layer会是一项浩大的工程。
• 每个物体只能选择一个layer。
物体之间的碰撞关系(是否碰撞)
物体之间的覆盖关系(谁在谁上层)
矩阵上的是否勾选代表两物体之间是否可以碰撞
一个游戏包含一个或多个scene。
scene包含了游戏的环境、ui和各种功能。可以把scene当成游戏的一个关卡。
当你新建一个unity的3d工程,默认会打开samplescene。场景中包含一个main camera(相机)和directional light(灯光)。
场景中所有的物体都是一个gameobject,例如场景里的角色、房子、石头、灯光、相机、特效等。
但其实,一个gameobject只凭自身什么事情都做不了,它只是个容器
如果你想给gameobject添加属性,让它变成灯光、或者树、或者相机,你需要给它添加component(组件) 。你可以给一个gameobject添加一个或多个的component,来让它拥有不同的外观和功能。
unity 有许多内置组件(如 box collider、capsule collider),能大大加快你的开发效率,我们还可以使用c# 脚本自定义组件
你可以把空物体当作其他物体的父物体,这就类似一个文件夹,把其他物体放了进去。这样更方便编辑管理(通过父物体整体移动、旋转、隐藏/显示等),hierarchy的结构也更清晰。
很多组件并没有对应的模型、界面或者特效,强加给任何一个都不合理。这时候使用一个空物体作为组件的容器更合适,比如游戏中全局使用的脚本。
有的模型的轴心点位置可能离模型本身很远或没有放在合适的位置。这会造成物体的位置、旋转与物体本身不符。例如一个轴心有问题的模型,可能出现以下问题:
不同的 component 为 gameobject 提供不同的功能
如果想要给一个gameobject添加功能,就需要给它添加组件。添加组件有两种方式:手动添加和通过代码添加。
添加组件有多种方式:
在 unity 中可以直接修改属性,这是游戏测试人员干的事,通过手动修改属性后可以直接体验游戏,可以通过测试得出组件各种属性的最佳值
通过 c# 脚本读其他组件后,读写组件的属性,这是游戏研发人员干的事,这样可以根据不同情况去设置组件的属性值,完成游戏逻辑
transform是每个gameobject必须有的组件,创建gameobject就会自动附带,而且不能删除,在inspector中显示在最上面
它的功能是确定一个gameobject在空间中的位置、缩放和旋转
这三个值都是相对于父物体的值,如果没有父物体,就是世界空间(即相对于世界坐标原点)的值
游戏开发中许多地方都会用到图片(又叫贴图、纹理)资源,比如模型的贴图、ui界面图片、粒子特效的图片等等。
对于大部分图片来说,导入设置只需要保持默认值即可。但是你需要了解各个参数,在遇到问题的时候有线索去解决。
一般建议使用png格式。
设置并不会改变图片源文件,只是unity引擎在使用这个图片时,会使用设置后的图片数据。
贴图有多种用途,在导入的时候也需要进行不同的设置。
texture type属性的可选项有:
默认选中。选中此选项可以让贴图的颜色存储在伽马空间中。非hdr颜色的纹理应该选中此属性(如反射和高光贴图)。如果贴图存储了特定含义的信息,并且在shader中需要使用对应值(例如平滑度或金属度)则不要选中此属性。
设置alpha通道的生成方式,默认是 input texture alpha
默认选中。
是否将alpha通道作为图片的透明度,一般情况都会选中;某些情况下可能仅在代码中使用alpha通道中的数据,但是图片本身是非透明的,则不选中。
6.1 non power of 2(非2的n次幂)
上文中介绍了贴图尺寸是2的n次幂会对提高性能,在可能的情况下应该尽可能使用2的n次幂大小。但是有些情况可能需要用到非2的n次幂的情况,就需要设置这个属性。这个属性的默认值是to nearest。
6.2 read/write enabled
默认禁用。
有时候需要在代码中获取贴图中的数据(如texture2d.setpixels,texture2d.getpixels和其他texture2d函数),需要启用此功能才能操作。
注意
启用此选项后,会创建该texture的副本,该贴图占用的内存会加倍。如果不是一定需要读写贴图数据,不要选中此选项。
该选项仅适用于未压缩和dxt压缩类型的贴图纹理,其他压缩类型的贴图无法使用。
6.3 gnerate mip maps
mipmap是一组逐渐缩小的图片,用于提高3d实时渲染的性能。远离相机的物体会使用更小尺寸的贴图。使用mipmap会提高33%的内存占用,但是不用mipmap会导致更大的性能损失。对于游戏内的贴图,基本上都应该使用mipmap,例外的情况有:ui图片、天空盒、光标、cookie贴图。mipmap也可以避免很多种贴图失真和闪烁的情况。
6.4 mipmap预览
贴图的preview窗口中,可以通过右上角的滚动条查看mipmap不同级别的情况。
6.5.wrap mode
默认值是clamp。这个属性设置贴图在平铺时的不同形式。
wrap mode需要同时设置材质球中的tiling属性,才能看出效果。
6.5.1 repeat平铺时自身重复。
6.5.2 clamp贴图的边缘会被拉伸。
6.5.3 mirror 贴图在重复时会呈现镜像的效果。
6.5.4 mirror once只镜像一次,然后边缘拉伸。
6.5.5 per-axis每个轴上可以单独设置平铺的模式。
6.6 filter mode
默认是bilinear。选择纹理在被3d变换拉伸时如何被过滤。
6.7aniso level
以陡峭的角度查看纹理时提高纹理质量。对于地板和地面纹理来说,使用这个参数很有用,但是相应的也会占用显卡的资源。
压缩设置中,可以设置一个整体的参数,也可以对不同平台进行单独设置。
7.1max size
设置贴图的最大尺寸
7.2 resize algorithm
缩放算法
mitchell 默认的高质量缩放算法
bilinear 对于噪波贴图,这个算法可能有更锐利的细节
7.3 compression
压缩的质量设置。压缩质量越高,图片的保真度越高,导入unity编辑器时所花的时间越多。
7.4 format
在default中,unity会根据你选择的压缩质量,自动选择format。
也可以对不同的平台单独设置。
7.5 use crunch compress
这是一种有损的压缩格式。这种算法能最大程度降低贴图占用的空间。crunch textures可能需要很长时间才能进行压缩,但运行时的解压缩速度非常快。
project中可以通过label搜索资源,一个资源可以设置多个label。
在unity中渲染一个物体,最重要的三个概念是材质(material),贴图(texture),着色器(shader)。
• 材质通过使用贴图,tiling参数,颜色参数等来定义物体表面应该如何呈现。材质的可配置参数取决于材质使用的着色器。
• 着色器是一段代码,基于场景的光照信息和材质的配置,计算物体最终渲染的顶点位置和颜色。着色器决定了材质上面的可配置参数。
• 贴图是位图图像。材质可以对贴图进行引用,然后着色器在计算gameobject的表面颜色时可以使用贴图中的信息。除了gameobject表面的基本颜色(albedo)外,贴图还可以丰富材质表面的许多其他方面,例如自发光、表面凹凸等。
这三者之间的关系是:
对于大多数的写实渲染需求(角色、场景、环境等),使用内置的standard着色器通常是最好的选择。
通常情况下,物体的mesh网格只给出了物体的大概形状,大部分细节都由贴图提供。贴图是绘制在物体网格表面的图像。你可以把贴图想象成有弹性的壁纸,这个壁纸可以通过拉伸、压缩贴到网格的表面。通常贴图的定位(uv信息)是通过3d建模软件完成的。
一张贴图要想贴到模型上,必须先将贴图赋予一个材质,然后将材质与模型关联。
贴图有不同类型和用途,例如:
其他用途的贴图,在讲unity内置的standard shader时会讲解。
一个材质可以使用多张贴图,比如同时使用漫反射贴图和法线贴图,就能让模型有基本颜色的基础上,细节更加丰富。
贴图的尺寸应该尽可能使用2的n次幂的大小,比如256x256,512x1024等尺寸 。
2d游戏中,贴图需要设置为sprite。在场景中绘制时类似一个纸片的形式,没有厚度。
一般情况2d游戏的角色需要一系列的图片来实现角色的不同状态或者动画。
使用unity内置的gui系统时,用到的图片需要设置为sprite。
游戏的图形用户界面(gui)可以让玩家查看信息、进行交互。例如,显示游戏当前得分、游戏菜单是游戏中常见的gui。虽然界面的图片与模型表面的贴图有很大不同,但是都是使用的图片资源。
网格非常适合表示实体物体,但对于魔法遗留的火焰,烟雾和火花等效果并不适合。粒子系统可以更好地处理这种特效。粒子一般用来表示很小的东西,比如液体或气体。当大量粒子一起运动时,可以产生非常逼真的效果。例如,可以将火焰贴图的粒子从中心点以极快的速度发射出去来模拟爆炸;可以用大量高速向下运动的水珠来模拟瀑布。
材质是连接贴图、着色器和模型的重要资源
在project窗口任一文件夹或空白处右键,create > material可以创建一个新的材质。新创建的材质默认会被设置为standard着色器,所有贴图属性为空,如下图所示:
材质创建后,可以在project窗口中选中,在inspector中修改其所有属性。将材质拖拽到场景或hierarchy中的任一物体即可将材质赋予对应的物体。
注意:
如果一个模型有多个材质,不要使用拖拽的方式赋予材质,否则会将多个材质全部替换为拖拽的材质。正确的做法是:将材质拖拽到模型mesh renderer的materials列表的对应位置。
编辑材质的第一步是确定要使用的着色器,可以点击材质的shader下拉菜单选择着色器
。
选中的着色器决定了材质包含的可配置的属性。
属性的类型包括颜色、滑条、贴图、数字、向量。如果将材质赋予了场景中的模型,修改属性会实时反馈到场景的模型上。
其中修改贴图属性有两种办法:
• 将贴图从project窗口中拖到材质的贴图属性的小方框中(最常用)
• 点击材质属性的小圆点,可以从列表中选择贴图
到此这篇关于unity新手入门学习殿堂级知识详细讲解(图文)的文章就介绍到这了,更多相关unity新手入门学习讲解内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论