sunny land(2d)
一款横版冒险类游戏 类似超级马里奥
游戏截图

编辑素材&tilemap
点击背景图片
每单位像素数:16后点击应用
把其余图片也设为16
把背景图片拖入layer中
在layer中右键新建tilemap 瓦片地图
点击window 选择2d tilepalette 平铺调色板
把我们的素材拖进去就可以使用我们的素材进行绘画了
点击创建 命名为map
图片集素材
sprite model 选择multiple
点击 sprite editor
点击slice 切割后 自动切割 应用 (不用这个)
点击slice 不选自动 选 grid by cell size 大小设为16*16
点击apply应用
tilemap的图层设为Ground
图层layer&角色建立
调整视图
尺寸选16:9
main camer的size设为6
选择背景图片
在排序图层中添加 Background 和 Frontground两个图层
把sprite图片拖入layer 创建player 把动画和动画控制器保存好
添加box clooider2D 点击编辑碰撞器 调整好碰撞范围
添加rigidbody2d组件
为地图添加碰撞体
选中tilemap
添加 tilemap collider 2d组件
控制player移动
新建脚本PlayerController
代码
rigidbody中 锁定z轴
备注
GetAxis 获得的是 -1~0 ~1的值
GetAxisRaw是直接获得-1 0 1的值
角色方向 跳跃
动画效果
创建过渡连线
animator菜单中的Paramters 添加选择float
命名为playerRun
移动中物体用float方便
idle到run
添加条件 参数选playerRun greater数值为0.1
取消 有退出时间的勾
过渡持续时间为 0
run到idle
添加条件 参数选playerRun rless数值为0.1
取消 有退出时间的勾
过渡持续时间为 0
打开playerController脚本
添加代码
跳跃动画
动画器中建立boole参数的 playerJump playerFall playerIdle参数
baselayer中把运动条件连好线
idle到jump
取消 有退出时间
过渡持续时间为 0
添加条件 playerJump设为true
jump到fall
取消 有退出时间
过渡持续时间为 0
添加条件 playerJump设为false
添加条件 playerFall设为true
设置好ground
修改代码
修复绊脚bug
为player添加 circle collider 2D组件
镜头控制
在camera上添加脚本控制
代码
windows->package manager->选择all package
找到cinemachine 点击安装
把背景图片都放到BackGround中统一管理
在BackGround中添加polygon collider 2D组件
点击编辑碰撞器
把背景图都圈上
由于默认是五边形 点击ctrl 再点击多余的点就可以删去不要的点
勾选上 is trigger
创建2dcamera
把player放到Follow中
可以修改body中的dead zone 调整镜头跟随
在Extension中添加额外组件CinemachineConfiner
bounding shape 2d选择BackGround
这样就能保证不会让摄像头拍到背景外的画面了
收集物品
把食物做成prefab
添加box collider 2D组件
勾选 is trigger
选择tag为 cherry
代码
添加排序图层
Background
Player
Frontground
Environment
Ground
物理材质&空中跳跃
创建一个2D物理材质
friction摩擦力设为0
给player的boxcollider添加这个物理材质
这样能保证player在墙壁上可以顺利滑下去而不是紧贴着
修改跳跃逻辑 让player仅能跳跃一次
添加UI
注意文本的锁定位置为左上角
添加Enemy
创建动画
添加2d刚体 和collider2d
添加Enemy tag
给player添加受伤效果
敌人移动
给frog创建2个空物体 命名为 left right 并标色为红色
代码
frogidle 的动画里 add event
选中后再检查器中 调用函数Movemennt()
把enemy抽象出来
重写父类时 start方法中不要忘了 base.Start();
添加音乐
给player 添加 audio source
player on awake
loop
点击覆盖 覆盖到全部 就可以把修改后的内容添加到预制体中
clip选择
背景 BGM02
跳跃 jump26
受伤 foxhurt
拾取道具coin20
子主题 5
对话框dialog
在canvas中新建panel
颜色调为半透明的黑色
调整好大小位置 固定锚点
命名为EnterDialog
在里面添加 UI->Text
在出口房子上添加box2d碰撞器
调整碰撞器大小到门的位置
添加脚本 EnterDialog
代码
创建动画 通过改关键帧的不透明度达到渐变效果
创建关卡2 level2
下蹲设计
代码
场景控制
在EnterDialog下添加脚本
代码
在生成设置中把 level1 level2添加进去 好让它生成index
2D光效
tilemap renderer中找到Default-Diffuse材质
画面会变暗
创建 材质
shader中选择sprites/Diffuse
把这个材质拖到player 以及门,背景图 中
为蜡烛 player添加点光源
player的点光源需要放在player内
点光源也是3d的 需要调整好位置
视觉差
在background上新建脚本
代码
把maincamera 拖入 Cam
MoveRate设为0.4
把背景树门统一放在一个游戏物体内管理
把prallax拖到这个游戏物体上
MoveRate设为0.2
主菜单
新建场景Menu
新建UI panel
将source image选择一张图片
命名为BG
复制一份BG 调整颜色 命名为MineMenu
添加Button-TextMashPro
新建TextMashPro 用来写游戏标题
在MainMenu游戏物体下添加Menu脚本
代码
在button下的 鼠标单击下把 MainMenu拖过来
此时的下拉菜单中就能找到写的开始游戏方法
在生成设置里把Menu这个场景放在第一个 也就是index为0
为场景添加过渡动画(录制)
把所有ui元素放到一个文件夹内
在动画结束调用UIEnable()方法
添加暂停功能
滑动条
调节音量功能
添加AudioMixer
调出音频混合器 window->音频->音频混合器
在AudioSource的输出力选择刚才的Mater
在slider中设置 Minvalue为-80 Max Value为0
在音频混合器中双击选中Mater 右键音量 选择暴露到可编辑脚本
重命名为MainVolume
移动端适配
资源商店下载 joystick pack
手机上下载unity remote5 用于unity连接
把Variable joystick放入Canvas下 调整好大小 锚点
代码
unity remote
单向平台
新建tilemap
添加 Platform Effector 2D 组件
勾选 Used By Effector
去掉 Use Collider Mask
勾选 Use One Way
layer 设为 Ground
soundManager
新建游戏物体统一管理音频
代码