1.将要被调用的脚本对象,直接拖到调用者脚本上
之后通过GetComponent<被调用脚本名>().方法名();
直接获取对象上挂载的脚本来调用目标方法。
2.在Hierarchy面板查找目标脚本
FindObjectOfType<脚本名>().方法名();---返回第一个被加载目标脚本
FindObjectsOfType<脚本名>().方法名();---返回所有被加载目标脚本数组
2.1通过标签查找
player = GameObject.FindGameObjectWithTag("Player").GetComponent
2.2通过Hierarchy中命名
foodText = GameObject.Find("FoodText").GetComponent
overText = GameObject.Find("OverText").GetComponent
restart = GameObject.Find("RestartBtn").GetComponent
3.单例模式---在被调用的脚本中,公开声明一个静态的该脚本实例,在初始化时使"实例=this"
便于在其他脚本中直接调用该脚本与其中的方法。
两脚本有碰撞,触发关系时可直接利用
(碰撞)collsion.gameObject.GetComponent<被调用脚本名>().方法名();
(触发)collsion.GetComponent<被调用脚本名>().方法名();
或SendMessage(以”方法名“调用物体中继承 MonoBehaviour 脚本的方法.)
(碰撞)collision.gameObject.SendMessage("方法名");
(触发)collsion.SendMessage("方法名");
调用对方脚本中的方法
//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);
}
}
复杂时可使用事件的广播,监听