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