找回密码
 立即注册
查看: 181|回复: 0

[简易教程] 从零开始独立游戏开发学习笔记(二十七)--Unity学习笔记 ...

[复制链接]
发表于 2022-4-26 21:14 | 显示全部楼层 |阅读模式
直接下一个教程走起。虽然是 3D 的,不过大多数方法是通用的。(除了现在这篇)
1. 新建项目,导入素材

这个就不多说了。我是直接新建 urp 项目的,因此不需要手动创建 pipeline。
1.1 素材升级

有些素材打开后是紫色的,说明素材本身没有升级到 URP。



1.1.1 自带升级包

像是教程里所用的 simpleNaturePack 里附带了升级包,直接点 URP 的升级包,重新导入一下即可。



1.1.2 没有自带升级包

参考这个文档。

  • 但是像是 dog knight 这种素材并没有自带升级包。因此我们要手动升级。
  • 面板里选择 Edit-> Rendering -> Render Pipeline Converter。(2020 之后的版本)
  • 然后换成 Built-in to URP,把下面全部勾选。(每个勾选就是问你要不要把这一类型转化为 urp,我们肯定是要把所有类型都转化为 urp 的)。然后先点左边的 initialize converters,再点右边的 convert assets。




其实第二种完全可以代替第一种,第一种只是当你只有一两个 package 需要升级的时候比较方便罢了。有多个 package 的时候,就算每个包都提供升级包,一个一个导入也麻烦。
2. 简单关卡创建

先熟悉一下一些工具。像是上方的 skybox,取消勾选可以让丑不拉几的天空盒子去掉(game里还有,只是 scene 界面看不到了)


这里我们去 asset store 里下载一个好看的 skybox。
2.1 skybox 更换

首先打开 window->rendering->lighting 面板,选择 environment tab。就可以看到 skybox 属性了。 选取 skybox 可以在 inspector 里调整一下属性。
2.2 影子

先导入一块地面(小技巧,拖入 hierarchy 的话 position 默认为 0,有时候这比直接拖入到场景中好调整一些),然后可以发现此时已经有影子了,但是这个影子并不好看。
这是我们就需要去设置 URP 了,URP 设置在创建项目的时候已经自动生成,可以看到很多个设置文件。每一个 quality 等级包含两个文件。我们找到当前项目的等级的文件:



可以找到 shadow 模块:
2.2.1 max distance

max distance 是指什么距离下渲染阴影,如果离的超过这个距离,阴影就不会渲染。
2.2.2 cascade count

虽然上面说是这样,但你会发现,调节这个 max distance,怎么阴影的质量也改变了,因为下面还有一个 cascade count,这个意味着分层级渲染。刚刚调整 max distance 之所以会影响阴影质量,是因为下面的这些层级的阈值改变了。max distance 本身的含义并没有问题。



看上图可以看到,此时有 4 个层级,距离角色 10.05 m 以内的话,按照第一层级,也就是最清晰的影子来渲染。往后越来越模糊。
2.3.3 normal bias

normal bias 有自己的说法和定义,不过基本是和阴影效果相关的(一般是阴影中出现光点),甚至 unity 手册直接推荐我们自己拖拽,根据眼睛看到的情况来修改。
2.3 lighting

打开刚刚打开过的 lighting 面板,选择 scene tab。new 一个新的 lighting setting,起个名保存起来。
下面是一些通常设置:

  • lighting mode 一般来说使用的是 baked indirect。
  • lightmapper 一般设置为 gpu,以节省 cpu 开销。
  • 整个面板最下方右下角有一个 auto generate 勾选项和一个 genrerate lighting 按钮。一般来说不要勾选 auto generate 因为每次修改场景都会重新生成比较浪费时间。当然双刃剑带来的好处就是不用每次修改满意后又要来这里手动点击 generate lighting 按钮了。除非场景非常简陋,机器非常牛逼,一般不要开这个。
  • 去 environment tab 可以看到环境光源是 skybox,因此刚才 generate lighting 后场景的颜色会和 skybox 比较匹配。想要自己设置也可以把 skybox 换成 color 或者 gradient 来自定义颜色。
2.4 asset 放置

资源放置的时候,经常遇到要对齐。比如说这棵树的底部怎样和地面对齐。手动调整肯定是爆炸。可以按住 v 键,选择 asset 要对齐的顶点,然后拖拽,就可以看到这个顶点会和场景上的顶点尝试对齐了。
2.5 快速设置摄像头位置(以及其他所有物体)

有时候想调整摄像头位置,但是通过物体操作工具以及 game 里的 preview 来确认视角是不是调对了很麻烦。有没有一种可能,先在 scene 里调整好角度(鼠标调整比换各种工具调物体容易多了),然后把摄像头的位置移过来,这样就很方便了。
当然是有的,调整好角度后,选取想要同步的 object(这里是摄像头),按一下 ctrl + shift + f 即可。
2. PolyBrush

之前下载的素材里只有 3 种地面,实在是有点少。一般 Unity 用 terrain 来制作地形。不过这次我们来学习如何使用 PolyBrush 来制作 low poly 风格的 terrain 的效果。
先去 package manager 里安装下来。这个包会提供 shader 样例,因此我们把样例 shader 也导入进来。
可以新建一个文件夹用来装插件相关的内容。
可以看到上面工具栏里多了一个 tools,进去可以看到 polybrush 菜单。打开 polybrush window。
2.1 使用

可以直接看到提供了 5 个工具。看名字也大概能猜到是干什么的。

  • 第一个选中后可以看到场景中出现了很多顶点,拖拽就可以往上拉,按住啊 ctrl 再拖就是向下了。拖的时候会发现是按照顶点的法线方向来拖拽的,如果想改变方向可以调整 direaction 属性,比如只想往上拉,可以选择 y 轴方向。也可以选择 mirror 来做对称地形。
  • 第二个是对地形进行柔化,让地形不那么棱角分明。
  • 可以刷上不同的颜色。不过教程中演示的并没有效果,因为当前物体的材质并不是 polybrush 材质。可以到刚才 shader 那里,选中后右键新建 material,然后把这个 material 拖到地面上,这样就可以使用了。
  • 可以用来刷 prefab,这样就不用一个一个把 prefab 拖到场景中了。先选中之后想要刷上去的所有 prefab,拖到 palette 中。然后从 palette 中选择一些 prefab,会在 brush loadout 中出现,这时候再到场景中刷,会发现这些 prefab 被随机地刷上,也可以在 brush loadout 中拖拽那个横线来调整出现概率。按住 ctrl 再按就会删除。还可以注意到其中有一个 hit surface is ground 勾选项已经被勾选,这样所有刷的东西都会成为被刷物体的子项。刷完后有什么不满意的,再一个一个地去仔细调。
  • 和上一项类似,只是换成了 texture。
2.2. probuilder

之前的地面很小,如何变大呢?直接改变 size 并不会增加顶点的个数。因此需要一个新的 package:probuilder,和之前一样需要先去 package management 里安装。安装完后导入 urp 支持。
可以自己想一下怎么使用,首先应该干什么。想好了吗?没错,我们先要去 tools 里找到 probuilder,打开面板。记住这个流程。
2.2.1 使用

可以看到都是文字,可以设置成 icon 形式。按住 shift 的时候鼠标移动上去还会显示具体详情。
那么开始用了:

  • 首先我们把之前的地面给毫不留情地删掉。因为我们要制作自己的地面了。
  • 使用第一个工具,换成 plane,画一个大一点的地面。下面的参数可以设置顶点数量。越大越细节,cost 也越高。
2.3 progrid

ProGrid 也是一个包,但是这个包现在并不能找到。查阅文档可知 pre-release 和 experimental 包不会显示在里面。前者需要在项目设置里 enable,后者则必须安装了之后才能看到。
得到这个消息的我立刻去 project setting->package manager-> enable pre-release package 勾选。然而我们回去找的时候,依然找不到 progrid,虽然多了一些其他的 pre-release,但是 progrid 并不在其中。
于是我们大胆推测 progrid 变成了 experimental 包。因此我们去网上搜索,发现 progrid 需要通过 git url 来手动导入,地址为 com.unity.progrids


安装完成后,发现果然,它已经变成了一个 experimental 包。
打开 progrid 面板,可以看到 scene 中多了很多工具。场景中也出现了一个大网格。虽然 Unity 自己也有用于对齐的网格,但是这个功能更多。例如左上角可以更换网格的坐标系。



第一个地方可以设置 snap value,也就是格子的间隙,可以用键盘上的 + 和 - 来快捷增加和减少。
2.4 继续制作地面

回到 probuilder,之前我们切分好了顶点。但是会发现切割是以正方形切割的,并非 low-poly 的三角形。其实很简单,probuilder 直接提供了这个功能 triangulate。选中物体点击 triangulate 即可。
然后我们就可以再回到 polybrush 里绘制了。
2.5 材质

随手建一个 Materials 文件夹用来存放之后的材质。里面新建一个 material 用作地面的材质,然后拖到地面上用作地面的材质。然后将其 shader 换成 polybrush 以便刷上颜色。



3. 智能导航地图烘焙

这一节要做导航系统:
1.1 地面烘焙


  • 首先打开 AI -> Navigation 面板
  • 第一个 agent tab 里可以调整人物行动的一些数据。
  • 选中物体(刚刚建立的地面)后,切换到 object tab,可以看到一些选项是灰的,这需要我们将其 flag为 navigation static。这里可以直接勾选,但同时也可以在 inspector 里调整。选好后会发现有一个弹框问是否把子物体也一起 flag 掉。这里我们选否,因为我们地面的子物体是树木,我们不想让人走在树木上。



4. 然后 object tab 里之前灰色的选项都可以调整了,navigation area 默认是 walkable,那我们就不用调整了。 5. 在去往 bake tab,先直接 bake 一下,然后可以看到地面变蓝色了,不过在一些比较陡峭的地方则没有变蓝。这些蓝色的地方就是可以行走的地方,那些没有变蓝的地方是通过上方 baked agent size 里的角度控制的。(长得很像 agent tab,但是不是一个东西)


目前的设置是超过 45 度就不能行走。一般游戏会设置成 30-45 之间。
1.2 障碍物烘焙

虽然地面可以走了,但是树木脚下的地面所在的区域并没有被限制,因此人还是可以走向树木,发生穿模等各种 bug。因此我们需要对树木也限制一下。(以及石头等其他障碍物)

  • 先选中所有的树木(如果命名比较规范的话,可以在 hierarchy 搜索框中搜索树木都含有的字符串,再全选,比较方便和准确,尤其当存在于多个父项中的时候不用逐一点开各个父项)。
  • 用相同的方法,不过这次设置成 not wkalable。
  • 都调整完再 bake。(bake 是对场景所有物体进行 bake,因此不用每次换个 object 是否 walkable 都要 bake 一次,全部调整完再统一 bake 就行)
1.3 player agent

接下来要对人物进行调整了。

  • 我们先去人物的 inspector 窗口,因为用的是下载的,自带了 animator,不过我们之后会制作自己的 animator,因此这里我们取消掉 controller。
  • 添加组件里选择 Navigation 可以看到有三种组件可以选。



3. 我们先选择 nav mesh agent,这是用来做人物导航的。可以看到人物身上出现了一个圆柱体,这便是 agent 的大小:


4. 根据人物的大小调整 agent。通常高度为人物的高度,radius 一般只包住躯干部分。 5. 记得到之前 navigation 面板中的 bake tab 里,把刚刚设置的高度和 radius 填上去。bake 一下,会发现障碍物周围的不可行走区域变小了,这是因为刚刚我们把 agent height 和 radius 都调小了。
1.3.1 nav mesh obstacle

尝试拖拽一下树木,会发现蓝不可行走域并没有跟着变化,还保留在原地,制作关卡的时候只需要重新 bake 一下就行了,这是因为我们设置成了 static。
不过,如果有一些障碍物可以在游玩的过程中移动,显然这种方式并不可取。那么我们可以使用 nav mesh obstacle 组件。

  • 随便拖一个物体上来,不要设置成 static,这样无法使用 navigation 面板了。
  • 我们添加一个 nav mesh obstacle 组件,在勾选上 carve ,会发现不可行走域立刻发生改变,而且拖拽物体,区域也会跟着移动。如果觉得默认的 box 形状不好可以换成 capsule。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-4-29 20:21 , Processed in 0.100768 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表