Unity学习笔记

你做的前面10个游戏都是垃圾,所以尽快做完这10个垃圾吧。

英语太重要了,好的视频资料都是英文的,不具备英语的Listen能力,学习效率极低。

工作流是什么?

Unity的设计理念

  • 可视化搭建内容+编程实现交互

  • 事件驱动类型的编程

  • 组件化

学习路线

unity商店买个游戏,修修改改熟悉下。

  • Unity官方文档
  • UnityLearn
  • UnityGameKit
  • 联网坦克大战Demo

另外,Unity界面中的每个功能,都去试一下,比如各个导航栏、操控场景和界面等等,手熟了效率才高。

如果是专注于效果实现,可能百人计划比Games101更合适一些。

这个文章里面有书籍推荐、路线推荐、项目案例等。

游戏分类与意图

img

Unity开发和前端开发的相似性

Unity和前端开发类似,也是通过组件包(Assets)构建页面(场景内容)。

类型 前端开发 Unity开发
UI组件库 ElementUI Standard Assets
内容 Web页面 Scene
自定义组件 Vue组件 prefab
操控 Vue声明周期 帧生命周期

名词概念

网格:Mesh:轮廓

材质:Material:渲染方式和参数

着色器:Shader:渲染的算法

贴图:Texture:图片,增加颜色细节

法线等其他贴图:Normal…:增加物体的凹凸细节等

动画:AnimationClip:让物体动起来

group

通用的分组概念,不再赘述,但是非常有用。

Rigidbody(刚体)

Quaternion(四元数)

(TODO)UnityEngine程序结构

待画一个继承关系和属性图

Volume(体积)

官方介绍

用于后处理的场景滤镜。

这个翻译为体积,Unity使用这个体积框架,之所以这样命名,是因为使用该系统可以分割场景,并根据摄像机位置启用特定设置或功能。

Volume盒是用来影响摄像机的一个通用框架组件

URP自带的后处理功能是放一个Volume,在上面加挂常用后处理,例如Bloom、Tonemap等,调节相应参数;在主相机上,勾选PostProcessing,这样就能得到后处理功能。

VolumeComponent

可以参考这个后处理的文章来辅助了解这个概念。

快捷键

视角

左键:点选物品,点ctrl多选,可以框选

按住(中键)滚轮:视角平移

滚动(中键)滚轮:视角拉进拉远

按住右键:旋转视角

按住右键+wasd:场景漫游

按住右键+shift+wasd:更快的场景漫游

点中坐标线:移动物体

按住alt和鼠标左键,转动鼠标:围绕视觉中心点旋转

按住alt和鼠标右键,转动鼠标:拉进/拉远视角

点击视图区域右上角的x、y、z轴:切换到对应的轴视角

点中物体,按F:聚焦该物体

物体属性

左上角有操控切换按钮:移动、拉伸等,具体如下:

Q:视角平移

W:移动

E:旋转

R:缩放

T:2D缩放

物体操作

ctrl+d:复制

shift+点选:范围选择

alt+点击箭头:展开收起所有子元素

预制件(prefab)

prefab(预制体):将修改应用到多个复制体上,多用于在运行时实例化复杂的游戏对象或游戏对象的集合

官方文档有个攻击的例子可以参考。

常用场景:

  • 通过在不同位置(例如在网格或圆形结构中)多次复制单个预制件来构建一个结构。
  • 从发射器发射飞弹预制件。飞弹预制件可能是一个复杂的配置,其中包含网格刚体碰撞体音频源动态光源以及一个具有自己的轨迹粒子系统的子游戏对象。
  • 车辆、建筑物或角色(例如机器人)分解成许多部分。在这种情况中,示例脚本将删除完整正常的机器人预制件,并替换为残骸机器人预制件。这种残骸预制件由机器人的单独破碎部分组成,每个部分都具有自己的刚体和粒子系统。通过这种方法,只需一行代码即可将机器人炸成许多碎片,这种情况下会将原始游戏对象替换为一个残骸预制件。

可以将其理解为Vue中的组件,可动态创建,可复用。

安装插件

window->package manager

可以通过git仓库地址安装,注意地址需要带上.git后缀。

比如这个:https://github.com/KhronosGroup/UnityGLTF.git

注意墙的问题,可能导致安装失败。

下载资源

注意:一定要先启动某个版本的编辑器,才能执行“在Unity中打开”的操作;否则只是启动了Unity Hub,是无法在商城Web页面打开资产的。

window->asset store

2020版本开始,为了性能考虑,Asset Store改为仅能通过web访问了。

https://assetstore.unity.com/

下载后,要先自己启动编辑器,通过工具栏Window->Pakcage Manager导入才行。

添加效果

选中物体后,右侧的Add Component

UI组件

这块和常规的前端UI组件类似,都是可以可视化设置的。

模型导入

普通的glTF模型是导入不进去的,需要借助插件:

https://github.com/KhronosGroup/UnityGLTF/releases

https://zhuanlan.zhihu.com/p/309207738

渲染

这块其实比我想象的要简单,摆放物体、调节材质、光照、设置环境。

那些高清写实的渲染,也是这样一步步来的。掌握艺术美感、对各种光照材质参数形成一定的敏感度,就可以调试出还行的视觉效果了。

这其实是偏设计师的工作内容,不是我们开发人员的重点,但是基本概念得了解才行。

首先澄清一个误区,UE和unity的画质并没有什么区别,不存在UE比unity画质好。之所以会有这样的误区,是因为UE的默认渲染管线是deffered(只能pc主机以及少数高端手机能跑的渲染模式),高级后效全开,unity默认管线是forward(最简单的渲染模式,但是所有手机都能跑),未开任何后效全素颜。

作者:孙琦证
链接:https://www.zhihu.com/question/476152940/answer/2058789549
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Unity的渲染效果,也可以做到很好:

https://assetstore.unity.com/packages/3d/environments/urban/archvizpro-interior-vol-6-120489

动画系统

动画分类

Animation Legace 老的动画系统,一个一个动画的播放
Animator Generic 新的动画系统,可以配置动画播放逻辑
Humanoid Humanoid 新的动画系统,用于人形动画的公用

动画和模型的绑定

AnimatorController

Avatar

可视化动画逻辑编辑器

条件参数设置

(TODO)动画可操控的对象的数据结构

(TODO)状态机与多线程

移动

官方API文档

本地轴(Space.self)与世界坐标系(Space.world)

常用于这个方法:

1
public void Translate (Vector3 translation, Space relativeTo= Space.Self);

如果 relativeTo 被省略或设置为 Space.Self,则会相对于变换的本地轴来应用该移动。(在场景视图中选择对象时显示的 X、Y 和 Z 轴。) 如果 relativeToSpace.World,则相对于世界坐标系应用该移动。

(TODO)操控Camera

之前我播放的时候,都是只显示一个2D画面,无法进行3D视角旋转,我怀疑是不是因为我没有编写操控摄像机的逻辑?

多个摄像机之间切换

https://blog.csdn.net/chengbowen1992/article/details/9526539

注意:

Hierarchy中搜索到的内容,可能是个分组,比如我今天搜索Camera就搜到了一个分组和一个具体的Camera对象,结果我把分组给disable了,整个场景中就没有激活的Camera了,所以就看不到了。

SceneView.GetAllSceneCameras();获取的,是分组,不是具体的某个对象。

让摄像机跟随物体移动

三种方法:https://blog.csdn.net/ghl1390490928/article/details/80139439

可以通过GameObject.FindWithTag(tagName)这个API获取某个物体:

1
Transform follow = GameObject.FindWithTag ("Player").transform;

物理引擎

触发器trigger

不产生物理碰撞的视觉效果,但是可以用来检测是否发生碰撞,可以用于拾取特殊物品、进入区域等。

这个和隐藏的兔子类似。

坦克动画拆解

注意,有些脚本是绑定在prefab上的,所以直接从project下的物体上,是找不到的。

官方坦克教程

https://learn.unity.com/project/tanks-tutorial

音效

可以在这个网站下载音效:

https://www.aigei.com/sound/short/transition_4/

绑定

直接拖到对应的物体上即可

C#脚本

脚本API文档

一句话经验

在创建脚本时,实际上是在自定义新的组件类型,可以像任何其他组件一样将这种组件附加到游戏对象。

设置为public的属性,可以自动识别为Unity的组件变量。

可以通过Script Execution Order设置脚本的执行顺序。

游戏编程中的一个关键概念是在渲染每帧之前改变游戏对象的位置、状态和行为,即帧更新(Update方法)

事件函数的执行顺序(脚本生命周期)

https://docs.unity3d.com/cn/current/Manual/ExecutionOrder.html

这个很具有参考意义,我们写其他可视化内容的时候也可以用到。

比如这个,就适合用来处理用户操作,像我们之前的动态柱状图的操作:

  • OnApplicationPause:在帧的结尾处调用此函数(在正常帧更新之间有效检测到暂停)。在调用 OnApplicationPause 之后,将发出一个额外帧,从而允许游戏显示图形来指示暂停状态。

脚本操作流程

  • 将GameObject拖动到公共属性上,进行绑定
  • 脚本内部调用属性,改变属性
  • 通过update更新UI

(TODO)1个单位的距到底有多长?

比如speed=1到底代表多少的位移量?

(TODO)协程

官方文档

协程就像一个函数,能够暂停执行并将控制权返还给 Unity,然后在下一帧继续执行。

关键的类

https://docs.unity3d.com/cn/current/Manual/ScriptingImportantClasses.html

  • GameObject:表示可以存在于场景中的对象的类型。
  • MonoBehaviour:基类,默认情况下,所有 Unity 脚本都派生自该类。
  • Object:Unity 可以在编辑器中引用的所有对象的基类。
  • Transform:提供多种方式来通过脚本处理游戏对象的位置、旋转和缩放,以及与父和子游戏对象的层级关系。
  • Vectors:用于表达和操作 2D、3D 和 4D 点、线和方向的类。
  • Quaternion:表示绝对或相对旋转的类,并提供创建和操作它们的方法。
  • ScriptableObject:可用于保存大量数据的数据容器。
  • Time(以及帧率管理):Time 类用于测量和控制时间,并管理项目的帧率。
  • Mathf:一组常见的数学函数,包括三角函数、对数函数以及游戏和应用开发中常用的其他函数。
  • Random:提供简便的方法来生成各种常用类型的随机值。
  • Debug:用于可视化编辑器中的信息,这些信息可以帮助您了解或调查项目运行时发生的情况。
  • Gizmos 和 Handles:用于在 Scene 视图和 Game 视图绘制线条和形状以及交互式手柄和控件。

录制视频

TimeLine + Unity Recorder:

https://blog.csdn.net/weixin_38239050/article/details/102472200

https://www.jianshu.com/p/d9a144c14777

发布项目(Build)

导出为exe

https://blog.csdn.net/qq_27124771/article/details/82085137

导出为WebGL

https://blog.csdn.net/u010930289/article/details/55814101

注意:需要先安装WebGL的工具库,并且启动项目之前,在Unity Hub中将项目的平台切换为WebGL.

编译为WebGL很耗费CPU,满负荷100%运转,直接笔记本卡住了。编译速度也很慢,小坦克的游戏花了4分钟;后来我禁用压缩格式,就很快了(几十秒)。估计是首次或者压缩小文件导致的。

这种方式其实是compile WebAssembly module

坦克游戏有接近40M,太大了,是否合适?

Uncaught ReferenceError: unityFramework is not defined

这是压缩导致的。

将Build Settings - 左下角Player Settings - Publishing Settings - Compression Format 设置为Disabled, 再次发布即可。

不过禁用压缩后,打包的文件大小从40M增加到60M了,不利于网页访问。

经验教训

  • 一定要保存后再播放;播放后一定要退出再增加GameObject

通过命名空间解决多人合作开发问题

依赖包冲突报错

GUID [4f91902dd112b67448af5d5aced09a31] for asset ‘Packages/com.unity.collab-proxy/Tests/Editor/PlasticSCM/ProjectDownloader/ParseArgumentsTest.cs’ conflicts with:
‘Packages/com.unity.plasticscm-cn/Tests/Editor/ProjectDownloader/ParseArgumentsTest.cs’ (current owner)
We can’t assign a new GUID because the asset is in an immutable folder. The asset will be ignored.

方案一(亲测可用):

在项目下的Packages文件夹内,把manifest 和 packages-lock 里的 “com.unity.collab-proxy”: “1.5.7” 去掉,重新开一下项目就好。这可能是collab更新后引发的与其他package冲突,应该会在后续版本修复。

方案二:

新建项目时不勾选PlasticSCM试试

方案三:

把文件AssemblyInfo.cs对应的AssemblyInfo.cs.meta删掉就好了,刚试过成功了

牛人

可以参考这个文章下面列出的人员名单。

https://www.zhihu.com/people/song-rui-feng

还有这个视频提及的YouTube博主:

https://www.bilibili.com/video/BV1z7411773F/?spm_id_from=333.788.recommend_more_video.2&vd_source=1ddc293a4439c7106ebd7878040f7c81

宣雨松:

https://www.xuanyusong.com/

陈嘉栋:

https://www.zhihu.com/people/jiadongchen

冯乐乐:

https://candycat1992.github.io/

陆泽西:

浙江工商大学,还搞投资的

http://www.luzexi.com/

秦无邪OvO:

大族激光

https://www.zhihu.com/people/zs8861

安柏霖:

腾讯北极光工作室

https://www.zhihu.com/people/toughbro/posts

谌嘉诚:

UE4,做了《死寂》,B站出了很多教学视频

https://www.zhihu.com/people/chen-jia-cheng-82-27

杨栋:

Unity大中华区平台技术总监

著有《创造高清3D虚拟世界》Unity HDRP实战书

https://learn.u3d.cn/u/yang-dong-4

独立VR游戏开发者:

http://blog.runevision.com/2021/11/launching-eye-of-temple-this-was-my.html

做了很多Low Poly的游戏和教程:

https://www.zhihu.com/people/jeremy-36-55/zvideos?page=7

(精)樱花兔(几个文章都是干货):

https://zhuanlan.zhihu.com/p/432821194

一个角色最终呈现在引擎里,美术制作上的思考以及注意事项:

https://zhuanlan.zhihu.com/p/344991995

用Unity制作写实渲染,画面实现上需要注意的一些问题:

https://zhuanlan.zhihu.com/p/349846781

炫酷效果

视觉系:

https://www.bilibili.com/video/BV1Rp4y1a7dB/?spm_id_from=333.788.recommend_more_video.-1

演示视频:

http://eyeofthetemple.com/

参考资料

如何学好Unity:

https://www.zhihu.com/answer/46815232

官方文档:

https://docs.unity3d.com/cn/current/Manual/UnityManual.html

(精)同济大学做的展厅(光影和物理很棒,关键是web端的):

TJDI Virtual Exhibition 2022

这是展厅的技术讲解:

https://www.bilibili.com/video/BV1pd4y167BL?spm_id_from=333.1007.tianma.1-1-1.click&vd_source=1ddc293a4439c7106ebd7878040f7c81

稚晖君的无人驾驶自行车也用到了Unity进行仿真测试(第七分钟开始):

https://www.bilibili.com/video/BV1fV411x72a?spm_id_from=333.337.search-card.all.click&vd_source=1ddc293a4439c7106ebd7878040f7c81

(精)脚本生命周期:

https://docs.unity3d.com/cn/current/Manual/ExecutionOrder.html

UnityLearn:

https://learn.unity.com/

Unity中文课堂:

https://learn.u3d.cn/

学习路线:

https://www.bilibili.com/video/BV1WK4y1a7Hq/?spm_id_from=333.788.recommend_more_video.1

(精)戴森球计划技术介绍:

https://www.zhihu.com/question/423211989/answer/1700841044
https://www.zhihu.com/question/442555442/answer/1711890146

(精)Unity制作智慧城市的流程介绍:

https://tob.design/#/works/detail/357

视频教程:

清华计算机系学生的2021教程:https://www.bilibili.com/video/BV1WK411V7dn/?spm_id_from=333.788.recommend_more_video.0

全:https://www.bilibili.com/video/BV12s411g7gU?p=280&spm_id_from=333.788.b_636f6d6d656e74.6

短:https://www.bilibili.com/video/BV1Yh411h7zk?p=2&spm_id_from=pageDriver

2DGameKit:

3DGameKit:

https://learn.unity.com/tutorial/kuai-su-ru-men?uv=2020.3&projectId=5facfd33edbc2a002016d49c

Unity资源分类(阿里的,他弄这个干嘛?):

https://www.zhihu.com/people/ud-27-49

找动作:

去mixamo这个网站下载,然后Unity中通过Humanoid就可以使用了

还有一家很好的动作商:WeMakeTheGame,提供了很多战斗动画

(精)一个人花四个月做的游戏Demo及感想:

https://www.bilibili.com/video/BV1EV411o7rg?spm_id_from=333.999.0.0

(精)黑暗之魂教程:

https://www.bilibili.com/video/BV1Fu411r7W7?p=1

如何用9周的时间做一个简单的游戏小场景:

https://www.bilibili.com/video/BV18U4y1L7AV/?spm_id_from=autoNext

Unity Shader - 水体交互(水波效果):

https://zhuanlan.zhihu.com/p/447311831

擅码网视频教程:

http://www.mkcode.net/html/luxian.html

辣眼睛的少女版求生之路:

https://zhuanlan.zhihu.com/p/447835717

houdini-电影特效制作的No.1:

https://www.sidefx.com/

Unity(WebGL)与JS通讯2021最新姿势(做大屏的时候很有用):

https://zhuanlan.zhihu.com/p/372323716

资料合集:

https://zhuanlan.zhihu.com/p/50876776

(精)如何制作地形:

https://www.youtube.com/watch?v=ddy12WHqt-M

(精)如何制作地形-带小屋:

https://www.youtube.com/watch?v=DXh7yeCFD5Y

卡丁车(Karting)demo项目:

https://assetstore.unity.com/packages/templates/karting-microgame-150956?_ga=2.247759936.674799938.1641111879-1481088384.1639635325

3D游戏套件:

https://learn.unity.com/project/zi-yuan-guan-li-qi-3d-you-xi-tao-jian?uv=2020.3

(精)3D创作的全流程:
https://www.bilibili.com/video/BV1tp4y1p7fe?spm_id_from=333.999.0.0

水木非凡境:

Unity实时渲染电影短片

https://zhuanlan.zhihu.com/p/64859107

(精)一个从零开始做独立游戏开发的人的文章:

https://www.zhihu.com/people/zhou-xiao-hao-12-12/posts?page=2

如何让素材的制作成本降低下来:

https://www.aseprite.org/

半小时学会AE:

https://www.bilibili.com/video/BV1o7411y7pH/?spm_id_from=333.788.recommend_more_video.5

常用插件:

https://www.zhihu.com/question/519924857/answer/2383473127

使用 Unity 引擎时有哪些禁忌?

https://www.zhihu.com/question/61642141/answer/597451261

(精)战神飞斧教程:

God of War's Axe Throw | Mix and Jam - YouTube

(精)元气骑士3D版,里面有球形闪电教程,他这一系列的整个想法很nice    (2分钟左右):

https://www.bilibili.com/video/BV1kt4y1E7v1/?spm_id_from=333.999.0.0&vd_source=1ddc293a4439c7106ebd7878040f7c81

(精)拼凑做3D游戏的坑(拼凑会导致性能极差):

https://www.bilibili.com/video/BV1ke4y1B7sq/?spm_id_from=333.1007.tianma.7-4-30.click&vd_source=1ddc293a4439c7106ebd7878040f7c81

(精)网易雷火新人练习项目,介绍了整个开发流程,值得学习:

https://zhuanlan.zhihu.com/p/498576422

(精)MonoBehavior和生命周期讲解:

Unity中的MonoBehaviour_mb60e5417d375b8的技术博客_51CTO博客

植物大战僵尸,有很多经验技巧:

https://www.bilibili.com/video/BV1a84y1z7oR/?spm_id_from=333.1007.tianma.8-3-34.click&vd_source=1ddc293a4439c7106ebd7878040f7c81

神经网络3D可视化:

https://www.youtube.com/watch?v=qtGEB-TtEP4

GitHub - maderix/NetRunner: NetRunner is a simple neural network visualizer created in Unity3D.

神经网络3D模拟合集:

https://www.youtube.com/watch?v=3JQ3hYko51Y&list=RDLV3JQ3hYko51Y&start_radio=1&t=16s

Youtube的Unity3D标签:

https://www.youtube.com/hashtag/unity3d

Unity引擎植入原生App渲染:

https://mp.weixin.qq.com/s/qyseETx9M5f0ObcjpSivYA

将Unity作为一个库嵌入其他平台:

将“Unity 用作库”用于其他应用程序 - Unity 手册

https://forum.unity.com/threads/integration-unity-as-a-library-in-native-ios-app.685219/