【Unity游戏开发笔记】手游-涂鸦弹跳开发分析

涂鸦弹跳游戏截图

游戏类型:2D跳跃类

游戏风格:简朴

游戏技术分析:

1、实现玩家弹跳功能

利用2D刚体直接添加一个向上的Impluse冲击力即可,加力之前将刚体velocity速度设置为0

2、游戏物体分析

2.1、Tile落脚点方块

分为六种:普通(绿色)、强力弹簧(红色)、坏的(灰色)、只能弹一次的(黄色)、左右移动的(蓝色)、上下移动的(蓝色)。

当玩家刚体y轴速度为负数时(即下落状态),触碰到Tile则会触发相应的事件,如:红色的会让玩家弹得更高,灰色的不会让玩家弹,而是自己会掉落,掉落逻辑是给Tile的刚体添加重力,玩家死亡时也会掉落处理方法一样。

2.2、道具

道具仅有飞行器(2种类型),飞行器可以让玩家向上飞,即直接用Translate方法向上移动即可,玩家飞行时是不会受到重力影响的!

2.3、怪物

怪物的处理基本是有左右移动的 或者不会动的,需要设置移动速度、移动范围,碰到玩家后游戏结束,被子弹打中后会怪物死亡。

3、利用资源池缓存以上物体,因为会经常使用。

资源池是使用了队列Queue来进行缓存的,实现非常简单,就只是为每种物体创建一个队列进行缓存,在游戏开始时实例化一堆物体,放入队列,当需要拿的时候从相应队列取出,PS:回收回去的时候记得要恢复默认状态。

4、各种物体实例化的位置和比率问题

4.1、Tile物体是随机生成位置的,其类型也是随机的,是通过一个类为每种Tile设置权值weight,而生成哪种Tile是根据其weight临界点与从[0~总权值]范围随机出的数进行比较得知,举例如:绿色(50),红色(30),黄色(20),灰色(10),蓝色(10) 那么总权值就是50+30+20+10+10=120, 随机数在[0,120]之间,而其绿色临界点是50,红色是80,黄色100,灰色110,蓝色120,只要随机数小于等于临界点,就生成哪种Tile,注意判断顺序是从小到大的临界点判断的,例如:随机数是40,那么在第一个判断40<=50就满足条件了,如果是80,那么在第二个判断才满足条件。

4.2、怪物先考虑要不要生成,其次是生成什么类型怪物是直接平均随机的,即若有3种怪物就是1/3几率。

4.3、道具如飞行器仅有一个,考虑的问题是要生成 还是不要生成,首先是考虑生成不生成,其次是考虑生成什么类型 也是平均几率随机。

5、摄像机跟随玩家功能

按照我目前理解是,当玩家头顶上的空物体(即目标物体target)大于屏幕中心点位置后,摄像机会逐渐向 摄像机位置+(屏幕中心点指向目标物体target)的位置进行靠拢。(有点混乱,一般是摄像机保持与玩家初始的向量偏移,即时时跟随玩家,玩家怎么动,摄像机就怎么动!而这种是只有当玩家头顶的空物体超过屏幕中心点后,摄像机才会向上偏移,注意摄像机不会向下跑的了!!!)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FollowTarget : MonoBehaviour {

    public Transform target;
    Vector3  velocity = Vector3.zero;
    float dampTime = 0.5f;
    private void Update()
    {
        if (target)
        {
            Vector3 pos = Camera.main.WorldToViewportPoint(target.position);
            //目标位置与视口中心点位置的向量
            Vector3 delta = target.position - Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, pos.z));
            Vector3 destination = transform.position + delta;
            //摄像机x轴不移动
            destination.x = 0;
            //当delta为正向值时,即目标位置大于中心点位置时,该条件成立
            if(destination.y > transform.position.y)
            {
                //缓慢地改变位置朝着目标位置移动
                transform.position = Vector3.SmoothDamp(transform.position, destination, ref velocity, dampTime);
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39574690/article/details/88529291