微信跳一跳项目总结
一、UGUI
1.开始游戏
提示Tip(text)
得分Score(text)
2.结束游戏
最终得分FinalScore(text)
游戏结束 GameOver(text)
重新开始按钮RestartBtn(button)
RestartButton.onClick.AddListener(() => { SceneManager.LoadScene(0); });
广告弹窗 含两个按钮
二、脚本控制
游戏体量不大这里用了一个脚本实现所有功能
1.生成台阶
首先拿到预制体 声明一个数组Boxtemplates[ ] 里面存放圆形台阶和方形台阶
然后克隆上面的台阶库,并设定位置、大小、颜色
prefab=Boxtemplates[ Random.range(0,Boxtemplates.Length) ]
NextStage=GameObject.Instantiate(prefab).transform
2.鼠标控制
首先MouseButtonDown 记录鼠标按下开始时间 用于后面计算跳跃力度
然后 GetMouseButton中改变玩家和台阶的Scale 实现蓄力效果
最后GetMouseButtonUp中 运行 跳跃功能函数方法 运用DOTween插件
Bug 1
玩家在空中还是可以点击鼠标进行跳跃
解决方法:设置一个bool变量EnableInput 再触发碰撞后才为true 一开始为false 并且 松开鼠标变为false 就可以解决 !
Bug2
通过试玩发现 玩家飞在空中是点击鼠标不放 落在台阶后松开鼠标 玩家会弹飞 这里是 落在台阶EnableInput为true 时 鼠标状态为Input.GetMouseButton 跳过了Input.GetMouseDown这一环节 使StartTime 还为上一条的StartTime 导致 elapse>1
解决方法:类似于Bug1 增加一个bool变量 isMouseDown 只有Input.GetMouseButtonDown 后才能获取MouseButton MouseButtonUp的操作。 一开始isMouseDown为false 只有Input.GetMouseButtonDown操作后为true 后面在MouseButtonUp变为false 即可解决。
增加一个判断条件
if (Input.GetMouseButton(0)&&isMouse==true)
if (Input.GetMouseButtonUp(0)&&isMouse==true)
3.跳跃功能
确定方向
用到了生成台阶方法中NextStage的Pos 两个位置相减并且normalized 得到方向 为了减少误差可以让Y=0 最后用DOTween插件实现玩家跳跃翻转的效果 这里注意下normalized的误差 有的时候会0.9几 所以设置判定条件的时候不要写 1
计算力度
Rig.AddForce(new Vector3(0, 5f, 0) + jumpDirection * elapse * Force, ForceMode.Impulse);
AddForce的常用API 一个表示xyz三个方向力度的vec3 和力的模式
4.OnCollisionEnter
判断是否落在台阶上
给台阶预制体创建一个子物体RolesPos 将玩家的位置赋给子物体 再用子物体的localposition 判断玩家落在了台阶的什么位置 从而确定是否成功落在台阶上!
成果落在台阶上则 生成台阶 增加分数 移动相机 使EnaleInput 为true
5.增加分数AddScore
首先获取玩家人物位置 然后计算人物位置与台阶的位置(中心)的距离
targetDistance = Vector3.Distance(hitPos, CurrentStage.transform.position)
实现双倍得分功能
最后显示再UI界面上 ScoreText=“得分”+Score 这里会自动转换成string 显示在ui界面上
6.MoveCamera
这里使用DOTween插件
Camera.main.transform.DOMove(transform.position + CameraRelativePosition, 1);
\