从零开始入门创作游戏——生命值与游戏对象的销毁和再生

两个月没找到工作的我继续瞎忙


接下来是设置生命值,撞到仙人掌就掉血,同时仙人掌消失。

  • 游戏素材下载

首先是去下载作为生命值的素材,Unity自带资产商店,所以可以登上去看哪些可以用的

Unity Asset Store - The Best Assets for Game Making

找到喜欢的素材并收藏后,需要导入到游戏资产内,通过点击菜单栏的【窗口】——【包管理器】就能找到自己收藏的素材,然后点击【导入】,选择需要导入的素材即可


  • 生命值的展示

将导入的素材添加到游戏场景中并重命名,注意对象和名字的顺序

然后编写小恐龙的脚本,添加上生命值的参数

扫描二维码关注公众号,回复: 17237287 查看本文章
public class DinosaurScript : MonoBehaviour
{

//只写了增加的内容

    public GameObject life001, life002, life003;//生命值的对象

    private int life = 3;//生命值 

    void Life()
    {
        if (life == 3)//生命值等于3时,全部鸡腿都显示,减一点生命值少一个鸡腿
        {
            life001.SetActive(true);
            life002.SetActive(true);
            life003.SetActive(true);
        }
        if (life == 2)
        {
            life001.SetActive(true);
            life002.SetActive(true);
            life003.SetActive(false);
        }
        if (life == 1)
        {
            life001.SetActive(true);
            life002.SetActive(false);
            life003.SetActive(false);
        }
        if (life == 0)
        {
            life001.SetActive(false);
            life002.SetActive(false);
            life003.SetActive(false);
        }

    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        isJumping = false;
        if (collision.gameObject.tag == "Cactus")
        {
            //Time.timeScale = 0;
            //改成使用gm的函数进行游戏终止的操作
            Destroy(collision.gameObject);//注意这里,如果是Destroy(gameObject)的话就是恐龙被删了
            life--;//触发了生命值减少后就调用一次上面生命值展示的函数
            Life();
            if (life < 1)如果生命值小于1就游戏结束
            { 
                gm.GameOver(); 
            }
            
        }
    }


}

这样就做好生命值设置了,但是仙人掌碰一下就永远消失,接下来需要重新修改仙人掌生成的逻辑


  • 游戏对象的销毁与再生

为了让仙人掌能不停再生,需要重构其生成逻辑和代码

首先需要创造仙人掌的再生点 ,创建一个空对象后,在右侧修改图标成一个点方便观察

然后将【游戏对象】中的仙人掌拖动到【资产】中,这个仙人掌就成了资产中的文件,然后删掉【游戏对象】中的仙人掌,因为这个仙人掌已经用不上了 

注意修改一下【资产】中的仙人掌对象的坐标属性,因为在生成的时候会以生成点作为原点,再以对象本身属性中的坐标系定位,需要是xy轴改成0 

接下来是让仙人掌在仙人掌再生点中进行生成,这就需要编辑GM脚本

public class GameManager : MonoBehaviour
{
    public GameObject cactus1;//引用仙人掌资产
    public GameObject cactusSpawmPosition1;//引用仙人掌再生点
    public float spawnTime;//设置仙人掌再生时间
    float timer;//计时器


    // 同样删除了多余的代码,只保留增加的
    void Update()
    {
        timer += Time.deltaTime; //deltaTime是增量时间,timer累加后才是游戏运行了多长时间
        if (timer > spawnTime)
        {
            Instantiate(cactus1, cactusSpawmPosition1.transform);//将对象实例化函数,参数是对象和位置
            timer = 0;//将计时器重置,不然只会生成一次
        }
    }
}

然后在GM中将对应的游戏对象和资产拖动到对应的参数位置即可

但是这样仙人掌除了碰到恐龙会消失外,会和背景的云一样不停再生,所以还需要修改一开始写的移动脚本,让仙人掌离开地图后消失

public class Movement : MonoBehaviour
{

    void Update()
    {
        transform.position = new Vector2(transform.position.x - movementSpeed * Time.deltaTime, transform.position.y);
        if (transform.position.x <= endPosition)//如果更新后的x坐标小于等于消失点
        {
            if (gameObject.tag == "Cactus")//如果游戏对象为仙人掌时,超出范围就删除对象
            {
                Destroy(gameObject);
            }
            else 
            { 
                transform.position = new Vector2(startPosition, transform.position.y);//那么这个对象的x轴坐标就重置为再生点坐标
            }
        }
        
    }
}

这样,进阶版的游戏做好了,恐龙碰到仙人掌时会扣血,同时仙人掌消失,如果更好玩一点可以将飞龙作为食物,碰到飞龙加一点生命值。

不过现在有个小bug,就是当恐龙在空中碰到一下仙人掌时,可以立马跳,即二段跳。因为在判断跳的脚本中判断逻辑是产生碰撞就能再次跳,这个只需要增加地板tag来判断即可,我就不写了

猜你喜欢

转载自blog.csdn.net/dwe147/article/details/126997531
今日推荐