Robbie Swifthand and the Orb of Mysteries
一款2d冒险解谜类游戏 玩家可以移动,跳跃,悬挂,下蹲。操作主角拾取规定数量宝珠后开启下一关。
游戏截图

导入素材
新建调色盘 命名为Background 存放在palettes文件夹内
将背景有关的tilemap拖入调色盘 保存到 Tilemaps/Tiles/BackGround
将平台有关的tilemap拖入调色盘 保存到 Tilemaps/Tiles/Platforms
将阴影有关的tilemap拖入调色盘 保存到 Tilemaps/Tiles/Shadows
tilemap
新建2D瓦片地图 命名为Background
点击Grid 继续创建Background Detaills Platforms Shadows 的瓦片地图
添加图层排序
依次添加Background platforms Player Foreground
Background Detaillsd的排序图层为Background但图层顺序为1
Shadows选择Platforms 图层顺序为1
把player拖入 排序图层设为player
如何生成有规则的tile
在存tile的文件夹内右键 瓦片 rule tile 命名为BG Details
选择一个默认的图片
添加规则
选择第8号贴图(中间的图片)
0号(左上)
2号
14
16
1
7
截图

继续设置内角
修改顺序位置
把左右 上下的 调到最后
快捷
shift 删除图画
B 笔刷
把创建好的BGDetile拖到 平铺调色板中就可以使用了
同样方式把Shadows的ruletlie做好
截图
在Platforms添加ruletile 命名为RandomTile
output选择随机
size设为4
把sprite设置好
物理组件
给platform添加tilemap collider 2D组件
勾选上 used by composite
rigidbody2D选择静态
添加 composite collider 2D组件
给player添加组件
添加rigidbody 2D
碰撞检测选择 持续
插值 选择 插值
锁定z轴
添加box collider 2D
调整碰撞器大小
设置一个摩擦力为0的物理材质
添加图层
添加 Ground Player
把 palyer platform设置好图册
地面移动
新建 PlayerMovement 脚本
下蹲
在unity中添加下蹲按键
代码
跳跃

在edit 项目设置 physics 2d中把重力的y改成-50
代码
射线判断周围环境
重写射线方法
代码
悬挂
代码

摄像机
调整camera的背景颜色为黑色
投影选择透视
调整景深
Background的z设为1
Background Detaills设为0.99
Shadows 的设为-0.01
添加 cinemachine
windows-> package manager-> unity registry->cinemachine
游戏对象->cinemachine->2D camera
把player拖到 Follow中
camera distance 设置为15
添加 一个cinemachine confiner 的Extensions
新建一个空的游戏物体 Camera Bounds
添加组件 polygon collider
设置为istrigger
编辑碰撞体形状
去 CM vcam1中把Bounding shape 2D设置边界为 Camera Bounds
把 shadows的排序图层设为Forground
2D灯光效果
找到props 的wall torch的prefabs
打开预制 更改 排序图层为 background
点击fire 打开渲染器 把排序图层同样改掉
同上修改 sparks
把火炬的prefabs拖入项目
右键火炬添加点光源
光源的z轴设为-0.8
范围设为20
调整颜色
新建材质球
添加platform的法线贴图
在Platforms的Tilemap Renderer的材质中选择刚才新建的材质球
把官方的EmissionPulse拖入我们的BackgroundDetaills中能产生灯光若隐若现的效果
找到官方提供的prefab 悬挂的灯 拖入场景
找打 windows 渲染 照明设置
调整环境颜色的曝光 使场景颜色合理
角色动画
把robbie_body预制拖入 Robbie 下
人物产生了虚影
取消勾选 sprite renderer 重影消失
在 sorting layer 中 把Default 放在 player 下面
新建PlayerAnimation脚本
把脚本拖入Robbie内部的预制上
跑步动画代码
使用animator编号方式
能减少移动端的错误
代码
注意 要将PlayerMovement脚本的xVelocity设为公开
blend tree
在动画器中找到 verticalVelocity
双击 Mid Air
在右侧添加7个运动域
把Pramater的 speed改为verticalVelocity
把7个Mid Air动画添加进去
更改数值
代码
音效控制
在PlayerAnimation中创建StepAudio()CrouchStepAudio()两个函数
点击Robbie_Body 选中Running的动画 找到Event 把对应的Function选中
把项目的Audio Manager拖到项目中
新建AndioManager脚本拖到这个预制上
代码
注 在跳跃 以及其他地方调用声音方法
音频设置
死亡机制
把尖刺做成刷子刷到地图上
右键创建 笔刷-> prefab brush命名为SpikeBrush
预制件 大小 设为1
把Spike预制体拖到元素里
回到 平铺调色板中就能在左下角选择自己的 SpikeBrush
在Platform上绘画
添加图层 Traps 给尖刺选择上该图层
新建脚本 PlayerHealth
拖拽到Robbie上
代码
配置
代码
重新加载 别忘去buildsetting把scenes加上
收集物品
把Shrine做成笔刷
添加Orb脚本 关联到Orb上
shrine的图层为Ground
代码
注意把收集物品的音效代码等也加上
视觉效果
到pachage manager找到post processing 安装
创建一个名为 postprocessing的图层
在场景中创建一个空的游戏物体命名为GlobalPostProcessing
选择postprocessing图层
添加组件 post-process Velume
勾选is global
把预设的Globle Reference 拖入profile里
在 Main Camera中添加组件
添加 post process layer
layer 设为postprocessing
添加震动效果
找到2D摄像机 CM vcam1
add extension 选择 cinemachine impulse listener
找到Shrine下的Orb预制 添加组件 cinemachine collision impluse source
把预设的Explosion Shake拖入 Raw Signal中
参数Frequency Gain的数值越大 震动越快 设置为100
在Trigger object filter中 图层遮罩 选择 player
别忘了把做好的prefab保存好
gamemanager
新建GameManager脚本
代码
在场景中创建一个空的游戏物体命名为GameManager
把脚本关联上
创建脚本SceneFader
在UI中找到Fader把脚本关联上
代码
在场景中右键新建UI Image
把Image删掉 把Fader放进去
Fader的材质选择Fader
orbs的代码
UI
新建Door脚本 关联到Door预制下
代码
新建WinZone脚本 关联到WinZone预制下
代码
把预设的UI拖入场景中
如果想某个图层不被遮挡 可以尝试改变排序次序的 等级
UImanager
代码
其他
死亡残影
判断一个特效是否拖累移动设备
看他是否有 fast mode 如果没有 建议不要用在移动设备上