开个新坑,最近瓶颈期,我觉得需要多敲代码,让自己更熟悉unity.
教程原链接:
https://www.udemy.com/course/project-little-adventurer-learn-to-create-a-3d-action-game/
b站视频链接:
【UNITY教程 | 学习使用高质量的游戏资产创建 3D 动作游戏(更新完毕)】https://www.bilibili.com/video/BV1B14y1E7SW?p=6&vd_source=b702db14148b48ad87406aaf674e1744
- 付费教程且看且珍惜,是生肉,但是勉强硬啃.(编辑,发现b站有自动生成英文和翻译功能,机翻可以啃的更舒服了)
- 下面内容是我边查资料,边尝试理解作者的操作意图所作,如有不对欢迎指出.
导入资源包
首先,项目设置里,设置渲染为线性渲染.以下内容为转载
线性渲染
Linear Rendering 和 Gamma Rendering的区别
Linear Rendering就是在shader中所有计算会在线性空间下进行,Gamma Rendering就是在shader中不进行转换到线性空间下,直接计算。然就是计算方程式不同,也就意味例如光照表面会有不同的响应曲线和图片效果,表现不相同。
1.Light Falloff
光照表现一般受光源的距离和法线两个因素影响(在同等光强下)。首先当我们用Linear Rendering时,执行Gamma矫正将会使光照范围变大。第二种会使边缘模糊,分不清界限。这更准确的表现了表面光照强度下降。
2.表面响应强度
随着光强的增加,非线性方式计算的表面会更亮一些。这导致了光照在表面很多地方曝光过度,而且给场景模型一个褪色(变白色了)的感觉。当你用线性渲染时,表面颜色仍然随着光照强度线性增加的,这样就使表面材质和颜色更接近现实.
3.混合
混合是在帧缓冲区发生的,当使用Gamma Rendering,这表示颜色之间混合是在非线性空间下计算的。然而这是不正确的。
上图是在Linear Space中混合结果,颜色之间过度不是很明显。
上图是Gamma Space中混合结果,颜色交界处出现了明显的其它颜色,颜色更亮,出现褪色的现象。
4.Mipmaps
计算纹理Mipmap是种线性计算,需要对某个方形区域内像素取平均值,如果纹理存储在非线性空间,那么计算时也是在非线性空间里计算,这样就会得到错误的结果。正确的做法是先转换到线性空间在计算mipmap。
5.Lightmapping
切换linear 和gamma方式,需要重新烘焙相关的Lightmapping。
关于渲染我了解的很少,具体资料可以参考:
————————————————
版权声明:本文为CSDN博主「追风者t」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/k46023/article/details/52489363/
回到项目,设置渲染为线性渲染:


导入包
刚导入时是一片粉色

Package Manager中选择注册表

安装Universal RP

安装完成后打开项目设置,

再安装一个这个

这个

添加包
com.unity.progrids

设置游戏场景
创建一个新空白场景,找到场景预制体拖入场景,并且重置位置属性

新建相机
设置tag为MainCamera
位置可以参考视频里的位置

后处理要打开,虽然我打开之后画面非常模糊,接着往下做看看吧.

新建和配置角色
新建空物体,位置重置为0,0,0

拖入对象

移除动画器

添加灯光

需要设置角色Mesh的layer层级为player

设置完就可以看到灯光

设置虚拟摄像机

注意图里圈出来的地方改一下

添加角色控制器组件
注意数值变化

玩家行走
功能实现写在代码注释中
新建俩脚本添加到player上

玩家输入类PlayerInput.cs
public class PlayerInput : MonoBehaviour |
角色控制类character
using System.Collections; |
动画控制器
创建动画控制器
新建AnimatorController,双击打开.

添加idle状态
新建状态,命名为idle,附加上idle资源,顺便检查下有没有开启循环播放动画.


给角色添加武器
打开角色骨骼,找到左手,将剑资源拖入

设置旋转和位置

右手同上操作,右手剑的位置信息如下:

运动动画
新建float参数speed,新建状态Run,附加上动画,通过make Transition建立状态过渡连线,两端都建一条箭头.


选中Idle->Run的箭头,接下来看图,关闭Has Exit Time


接着选中Run->Idle箭头,关闭Has Exit Time,设置状态过渡用时和过渡时机.

回到character.cs脚本中,添加一个动画控制器变量,CalculatePlayerMovement方法中,为Speed赋值.


下落动画
动画控制器中新建一个bool变量airBorne

确保动画是循环播放

新建状态Fall,由Any State指向Fall

选中该箭头,注意has Exit Time不选中,因为我们要立即执行

拉到最下,连接AirBorne参数为true时进行下落状态

同理Fall->Idle状态设置如下:


接下来回到character脚本,CalculatePlayerMovement方法中添加一条代码控制AirBorne参数.

回到编辑器运行测试,我发现下落和落地后的动作过于僵硬,所以把上面的两个状态之间的过渡都调成了0.1;


脚步视觉特效
新建一个空对象命名为VFX,然后资产文件中找到脚步特效prefab,拖入其中

