boxmoe_header_banner_img

Hello! 欢迎来到我的博客!

加载中

文章导读

Unity——等待复活逻辑的三种处理办法


avatar
xiaoifei 2024年5月7日 225

前言

最近在小狐狸项目中遇到了一个需求,就是在小狐狸死亡后需要等待若干秒才能在检查点复活,在原视频中是利用协程所实现的

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

public class LevelManager : MonoBehaviour
{
    private static LevelManager instance;
    public static LevelManager Instance => instance;
    public float waitToRespawn;

    void Start()
    {
        instance = this;
    }

    public void RespawnPlayer()//从外部的Player的受伤方法调用该方法
    {
        StartCoroutine(RespawnCo());//协程
    }

    private IEnumerator RespawnCo()
    {
        PlayerController.Instance.gameObject.SetActive(false);//失活玩家对象
        print("waiting for Respawn...");
        yield return new WaitForSeconds(waitToRespawn);//迭代器语法糖
        PlayerController.Instance.gameObject.SetActive(true);//激活玩家对象
        PlayerController.Instance.transform.position = CheckpointController.Instance.spawnPoint;//回到存档点
    }
}

在这里我想了下其他的方法来实现该功能

创建计数器循环

思路:创建一个waitCounter计数器,并在Update函数计数,如果满足条件就执行Respawn函数

    public float waitToRespawn;
    private float waitCounter = 0;

    void Start()
    {
        instance = this;
    }

    void Update()
    {
        if (waitCounter > 0)
        {
            waitCounter -= Time.deltaTime;
            if (waitCounter <= 0)
                RespawnCo();
        }
    }

    public void RespawnPlayer()
    {
        PlayerController.Instance.gameObject.SetActive(false);
        waitCounter = waitToRespawn;
    }
    public void RespawnCo(){
        PlayerController.Instance.gameObject.SetActive(true);
        PlayerController.Instance.transform.position = CheckpointController.Instance.spawnPoint;
    }

Invoke延迟函数

    
    public void RespawnPlayer()
    {
        PlayerController.Instance.gameObject.SetActive(false);
        Invoke("RespawnCo",waitToRespawn);
    }
    public void RespawnCo(){
        PlayerController.Instance.gameObject.SetActive(true);
        PlayerController.Instance.transform.position = CheckpointController.Instance.spawnPoint;
    }

 

 



评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字
插入代码