3.单例模式---在被调用的脚本中,公开声明一个静态的该脚本实例,在初始化时使"实例=this"
便于在其他脚本中直接调用该脚本与其中的方法。


两脚本有碰撞,触发关系时可直接利用
(碰撞)collsion.gameObject.GetComponent<被调用脚本名>().方法名();
(触发)collsion.GetComponent<被调用脚本名>().方法名();
或SendMessage(以”方法名“调用物体中继承 MonoBehaviour 脚本的方法.)
(碰撞)collision.gameObject.SendMessage("方法名");
(触发)collsion.SendMessage("方法名");
调用对方脚本中的方法

单例基类:
//手动挂载1个
public class BaseSingleton : MonoBehaviour where T:MonoBehaviour
{
private static T instance;
public static T GetInstence()
{
return instance;
}
protected virtual void Awake()
{
instance = this as T;
}
}
//自动生成
public class SingleTe : MonoBehaviour where T : MonoBehaviour
{
private static T instance;
public static T GetInstance()
{
if(instance == null)
{
GameObject obj = new GameObject();
obj.name = typeof(T).ToString();
DontDestroyOnLoad(obj);
instance = obj.AddComponent();
}
return instance;
}
}

//4.单例模式
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{
public static GameManager instance;
SceneFader fader;
// Start is called before the first frame update
void Awake()
{
if (instance!=null )
{
Destroy(gameObject);
return;
}
instance = this;
DontDestroyOnLoad(gameObject);

}

//在外部将其他脚本通过此静态方法注册到GameManager中的变量(引用),(可在GameManager中调用其他脚本中的方法)
 /*   void Awake()//被调用的脚本
{
    ani = GetComponent<Animator>();
    FaderID = Animator.StringToHash("Fade");
    ////将脚本指定为GameManager的变量,使其中的方法可以在gamemanager中调用
    GameManager.RegisterCceneFader(this);
}*/
public static void RegisterCceneFader(SceneFader obj)
{
    instance.fader = obj;
}

public static void PlayerDied()
{
    instance.fader.FadeOut();//调用其他脚本中的方法
    instance.Invoke("RestartScence", 1.5f);
}

public void RestartScence()
{
    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    
}

}

复杂时可使用事件的广播,监听