前言
最近在小狐狸项目中遇到了一个需求,就是在小狐狸死亡后需要等待若干秒才能在检查点复活,在原视频中是利用协程所实现的
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)
暂无评论