FeastSC 发表于 2022-5-11 09:59

unity2d Tilemap Collider优化

如图:


由于Tilemap Collider会给每一个瓦片都添加碰撞核,这导致了人物在移动时会依次和每一个碰撞核进行碰撞,从而造成卡在缝隙里等的问题。
我们现在想把这些单独的碰撞核合并成一个整体
就是勾选这里


然后这里会提示:


所以按照他的要求添加一个复合的


添加上以后就可以观察到已经变为整体了


但是这样有一个问题


就是 如果我们绘制新的瓦片,它还是会合并到这个碰撞体中
还有个问题,就是它会自动添加刚体,并且还设置了重力。


这导致了游戏一开始后瓦片地图会掉下去。
解决方式:


设置为静止。
(我觉得 之所以不把重力直接改为0,是因为虽然不往下掉了,但是被人物一撞还是会被撞飞)
也可以直接在这里勾选:


人物:

碰撞核改为连续检测:



另一个视频里,他又补充了个 把【Body Type】改为Kinematic
这里插值从None改为Interpolate



意思是人物在撞到墙上时会稍微陷进去一点,这样会影响操作手感。
卡墙:

如果一直按着方向键不动,人物就会粘在墙上,甚至还可能判断为接触了地面,还能跳跃。
解决方法就是搞个材质,摩擦力变为0


蹲下:

新逻辑:直接让碰撞核大小减半
注意这里的Offset,意思是相对于Transform的偏移量?


注意这里:


要声明具体的Box,如果只是生命Collider,是没有下面的属性的。


跳跃:

长按空格实现跳的更高、蹲下时起跳跳的更高。
up先把重力常量从9.8变味了-50.(为啥?我没搞懂)
参数:


普通跳跃的力,跳跃加成的力,支持长按的时间,下蹲时额外跳跃加成。最后一个说是跟上面配合的。
(这个时间 up说稍后会解释为什么这么小)
方法:


跳、长按跳、蹲。(这个长按跳肯定还得和时间变量来配合的)
长按跳代码:


逻辑:我有点理解不了,先不要详细看了,到时候自己写吧,就是用时间计时。
下蹲跳,没什么特别的,就不截图了。不过从游戏设计上,下蹲跳应该比长按跳 跳的更高一些才合理。
悬挂:



头部这里设置三条射线,拥有长度。如上图,红色的这两条检测到物体,而绿色的那一条没有检测到物体时,按键即可悬挂。悬挂,up的操作就是把人物设为static。
但是有个问题就是,上图可以再往上挪一点,只要竖着的那个线是红色的就能悬挂,这样悬挂的位置就看起来怪怪的。up的解决方式用了Raycast.instance这个属性,可以获得离射线最近的碰撞体的距离。up就用横着的最高的那个射线来获取一下,然后把人物向下移动就可以了。
还有个问题,就是悬挂上以后人物可以左右翻转。up是直接在代码里用个布尔让玩家没法操控了。
(这方法不太好吧...)
然后为了在悬挂状态还能进行特定操作,up又写了一系列代码,就不参考了。
这里有个新东西介绍一下:


用这个可以把static的角色。
新的动画参数设置



以前都是直接用Animator里设置的字符串来设置的,还有一种写法就是先转换为哈希的int,然后设置。
这是因为移动端直接传字符好像可能会有某些bug
Blend Tree



它的作用就是通过某一个变量的值的大小,来控制播放不同的动画


这里可以调整数值的大小,默认会按照从小到大排序


根据Layer判断碰撞

之前都是根据tag判断的,现在介绍一个新的,根据layer来判断




代码在地图生成对象



新插件:PostProcessing

用来提升视觉效果的


给摄像机添加layer


然后这里需要给组件添加一个layer


但是不要添加everything,因为不支持


我们新创建一个layer,起名为:


搞个空物体,改名,设置为刚才那个层


然后回到刚才的相机的组件


这里是以打钩的形式来选的,所以先选nothing把所有的都取消了,再勾选我们需要的post processing。
现在Camera就可以看刚才那个空物体所承载的特效了
切换到空物体面板,坐标归零,然后勾选,让他可以可以影响游戏的整个全局。如果只想影响一部分,可以取消勾选,然后添加一个collider加到这里面。(up大概说了一下,回头要实验还得自己查一下)


这是优先级和特效:数字越大越在上层


new一个 然后给它加特效


这里面很复杂,具体需要可以看手册。这个只有英文手册


现在讲几个常用功能:
Bloom


如果要使用里面的参数的话需要主动勾选




第一个是泛光(模糊?),第二个是增幅(明亮?)
Color Grading:
调色相关


White Balance白平衡,用来调节色温的,就是冷暖,就是蓝色黄色
Saturation饱和度:灰色到色彩鲜明
Chromatic Aberration:畸变。就是喝醉了或中毒了后画面扭来扭去那个感觉


Spectral Lut:可以单独影响某一个颜色
Lens Distortion:镜头(或许可以用来做子弹时间的开启特效?)


Vignette:让画面四周出现阴影。


这里有一个注意点,如果想在手机上用,就把这个勾选上。如果一个东西没有这个选项,最好不要在移动平台上用,否则会非常卡顿。


相机震动

给Cinemachine 相机添加一个额外的组件Listener


角色碰撞宝珠后,相机震动。所以给宝珠添加一个Source


在这里给他添加一个shake,就是要相机如何来摇晃


up这边是直接拿的素材包里的做好的


我觉得这里其实自己new一个也行,就是自己调一下震动频率
可以在这里创建:(下面看不见的地方选择NoiseSettings)


然后给宝珠的这个组件再设置一下:


你希望哪个layer触碰它的时候发生震动?选择player


分别是:振动幅度、震动频率
震动幅度默认是1,如果设置超过100甚至会超出屏幕   
震动频率越大,震动完成的速度越快。
碰撞Layer时



LayerMask类就是用来控制Layer相关的,Layer就是Tag右边的那个东西。
注意up这里是转成了int类型,然后再进行判断是否相等的。
(我查了一下用字符串来判断相等也可以,虽然估计会更耗费性能)
计时



音效控制 Audio Mixer

Window窗口下拉


这个是为了解决我们音效控制的类里 由于没有添加Audio Source,导致没办法调整各个声音的大小


长这样:


group就是音轨。上下拖拽右边这个大小就可以调整音量
现在我们只需要在代码中new Audio Source,然后调用某个方法把它输出到Audio Mixer上就可以调整了
手动操作的话如下图,我们代码就是复现这个过程。


和音源一一对应


给Source设置output


然后绑定一下(这玩意儿是哪来的,好像是mixer添加完以后自动就有?)


mixer还有一个功能,就是在游戏开始后,可以直接从这里调,会自动。


刚才只讲了用代码进行声音的开闭,没讲怎么调大小,大概就是:
从这里把它发送到代码里(老师没讲)


生成移动平台游戏

要注意填写这里


安卓的话还要填写这里

页: [1]
查看完整版本: unity2d Tilemap Collider优化