Robbie Swifthand

Robbie Swifthand and the Orb of Mysteries

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

游戏截图

image image image image

导入素材

新建调色盘 命名为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
            截图

image
继续设置内角

修改顺序位置
                把左右 上下的 调到最后
            快捷
                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中添加下蹲按键
        代码
    跳跃

image
在edit 项目设置 physics 2d中把重力的y改成-50 代码

射线判断周围环境

重写射线方法
    代码

悬挂

代码

image

摄像机

调整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 如果没有 建议不要用在移动设备上