框架
主菜单
场景切换
计分
游戏逻辑
合成动效
音效
包含的内容:
- 背景、墙、水果、死亡线、UI、音乐
逻辑:
- 待命水果X轴跟随鼠标落下,待命水果是没有重力的
- 水果落地有碰撞,带有弹性,相同水果碰撞合成更大的水果
- 如果抵达死亡线游戏失败,重新加载场景
- 显示当前分数
场景
地板、墙添加方形的碰撞体
水果添加circle碰撞体
添加弹跳效果:
在物体上添加新的material(物理材质只包含两个参数:摩擦力和弹性)
我们将摩擦力调整为0.4, 弹性调整为0.2。
将水果做成预制体:
给不同的水果添加circle collider和rigidbody
游戏逻辑
Start:游戏一开始就执行,也就是游戏物体一出现就运行
Update:每一帧执行
创建变量:
水果预制体数组 GameObject[]
待定水果的位置 Transform
创建一个子物体代表待定水果的位置
待命水果
方法:
在Start中创建水果,写一个创建水果的方法
- 随机一个整数整数值,获得对应的数组预制体,并且将其实例化,创建一个临时坐标,降临时坐标等于我们创建的位置
- 获得实例化的物体的RigidBody组件的重力
- 在Update中获得鼠标位置,将屏幕坐标转换成世界坐标;然后让待命物体的X轴和鼠标X轴一致(原理是设定两个浮点值作为左右边界值)
- 判断鼠标的状态
按住鼠标的时候物体随鼠标移动
松开鼠标的时候,给其rigidbody的gravity赋值为1
然后延迟0.8秒再调用产生物体的方法
在所有方法之前先判断当前是否有物体在场景中
- 水果合成
- 新建一个脚本挂载在水果物体上,使用OnCollisionEnter来判断碰撞,如果碰到的collider的标签是我们添加的标签
- 合成的时候需要判断:当前物体不是待定物体且碰到的物体的标签也是水果;并且获得物体的id,只渲染一个
- 游戏失败逻辑
- 如果不是待定物体,碰撞到了死亡线,且不是第一次碰到,那么显示游戏失败。
- UI
- 添加一个canvas-text,新建一个脚本挂载,将其设置为单例,为Score添加一个属性,然后在水果碰撞的脚本里更新分数;
- 添加音效
- 添加一个audio source,再挂载一个脚本(单例模式)获取AudioSource类型的组件
- 创建一个播放音频的方法,参数是audioclip;audiosource.playoneshot(audioclip)
- 在水果上挂载的脚本中,更改分数的同时播放音效playaudio方法
- 判断如果碰撞到的物体是地面,那么播放落地的音效