unity在其中一个脚本,怎么引用另一个脚本的函数

介绍

在 Unity 中,有多种方式可以引用另一个脚本的函数,其中比较常用的有以下几种:


方法1

通过获取组件引用: 如果两个脚本都是同一个游戏对象上的组件,您可以通过GetComponent() 方法获取目标脚本的实例,并直接调用其中的函数,例如:

// 在 ScriptA 脚本中获取自身所附加的 ScriptB 组件
ScriptB otherScript = GetComponent<ScriptB>();

if (otherScript != null)
{
    // 调用 ScriptB 中定义的 public 函数
    otherScript.MyFunction();
}


方法2

通过查找对象: 如果您想要在一个游戏对象的脚本中调用与其他游戏对象关联的脚本的函数,您需要使用Find() 或 GameObject.FindWithTag() 函数来查找目标游戏对象,然后再获取其所附加的脚本并调用函数,例如:

// 在 ScriptA 脚本中查找指定名称的游戏对象
GameObject otherGameObject = GameObject.Find("OtherGameObject");

if (otherGameObject != null)
{
    // 获取 OtherGameObject 上所附加的 ScriptB 组件并调用其中定义的函数
    ScriptB otherScript = otherGameObject.GetComponent<ScriptB>();
    if (otherScript != null)
    {
        otherScript.MyFunction();
    }
}


方法3

当你需要在不同的脚本中共享变量和函数时,可以通过以下步骤来创建静态单例实例并调用其中的函数或访问其中的变量:

创建一个 MySingleton 类,并将其设置为带有 MonoBehaviour 组件的 MonoBehavior 类型。
在该类中定义您需要共享的变量和公共函数,并将它们全部设为 public 和 static。
在类中添加一个静态的 Instance 属性来保存单例实例,并在 Awake() 函数中进行实例化。如果 Instance 实例已经存在,则销毁新的对象。
在其他脚本中,通过 MySingleton.Instance 来获取到该单例实例,从而可以直接调用其中的公有函数或访问其公有变量。
下面是示例代码:

public class MySingleton : MonoBehaviour
{
    // 静态的MySingleton实例
    public static MySingleton Instance;

    // 需要共享的变量
    public int mySharedInt;

    // 需要共享的函数
    public void MySharedFunction()
    {
        // 做一些事情...
    }

    private void Awake()
    {
        if (Instance == null)
            Instance = this;
        else if (Instance != this)
            Destroy(gameObject);

        DontDestroyOnLoad(gameObject);
    }
}

在您的其他脚本中,您可以使用以下方式来访问 MySingleton 中所声明的变量和函数:

// 访问变量
int x = MySingleton.Instance.mySharedInt;

// 调用函数
MySingleton.Instance.MySharedFunction();