委托是一种容器,容器里面放的是函数方法,可以同时运行多个函数
事件 event 一般就是用来阉割委托,只能增加函数,提高安全性
就比如我设置小鸟碰撞到水管,就运行订阅委托所有函数
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class Player : MonoBehaviour
{
public float upForce = 200f; // 小鸟向上飞行的力量
public float gravityScale = 1f; // 小鸟的重力系数
public float drag = 0.5f; // 小鸟的空气阻力系数
private bool isDead = false; // 是否死亡
private Rigidbody2D rb2d; // 小鸟的刚体组件
private Animator anim; // 小鸟的动画组件
bool isRuning;
public static event Action OnDeathEvent;
void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.CompareTag("Pipe"))
{ // 如果碰到水管,小鸟死亡
isDead=true;
OnDeathEvent?.Invoke();//非空就运行
}
}
}
订阅委托,有订阅,就有退订阅
public class MenuUI : MonoBehaviour
{
private void Awake()
{
Player.OnDeathEvent+=DeathEvent;
}
private void OnDestroy()
{
Player.OnDeathEvent-=DeathEvent;
}
//死亡委托
void DeathEvent()
{
Debug.Log("MenuUI");
}
}
在 Unity 中,加载场景的过程涉及到销毁和重新生成游戏对象。当您加载一个新场景时,Unity 将销毁当前场景中的所有游戏对象,然后根据新场景的内容重新生成游戏对象。
具体来说,当您加载一个新场景时,Unity 将按照以下步骤执行:
-
卸载当前场景:Unity 将销毁当前场景中的所有游戏对象,并释放与场景相关的资源。
-
加载新场景:Unity 将加载新场景中包含的所有资源,并生成新的游戏对象。
-
初始化新场景:Unity 将对新场景中的所有游戏对象进行初始化,并执行场景中的任何启动脚本(
Start()
方法和Awake()方法)。
//重新加载本场景
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
详细的看
【委托•语法篇】委托类型的声明和实例以及Action委托和Func委托(附:委托的重要性,函数指针,多播委托,委托的缺点)_哔哩哔哩_bilibili