【问题标题】:Access functions and variables from another script in Unity从 Unity 中的另一个脚本访问函数和变量
【发布时间】:2014-04-15 09:28:18
【问题描述】:

我已经搜索了几个小时,但没有得到任何结果。我有一个名为 GameSetup.js 的脚本,它附加到一个空的游戏对象(名为 GM)。它包含对我当前相机的引用,并具有获取屏幕宽度和其他内容的功能。我想从其他脚本访问这些函数(和变量)。例如,我有另一个名为“Blocks”的空游戏对象,它的一个组件是 BlockGenerator.js ,它具有 BlockGenerator() 函数。我希望能够像这样在 BlockGenerator() 中使用 screenWidth():

BlockGenerator.js

BlockGenerator(){
var Blocknumber : int =  GameSetup.ScreenWidth / blockWidth;
}

GameSetup.js

   function  ScreenWidth() : float{
        var screenWidth : float = (mainCam.ScreenToWorldPoint(new Vector3(Screen.width,0f, 0f)).x)* 2;
        return screenWidth;

例如,如果我使用 GetComponent(),BlockGenerator.js 中当然无法识别 GameSetup。我不确定是否可以在检查器中拖动 GM 游戏对象并将其传递给 BlockGenerator.js ,我没有尝试过。但问题是,它无缘无故地让游戏脚本变得非常复杂。如何设置和访问全局函数和变量?

【问题讨论】:

    标签: function unity3d global-variables unityscript


    【解决方案1】:

    在包含 BlockGenerator 方法的类中,您需要定义一个 GameSetup 类型的公共变量。然后在检查器中拖动您希望访问其实例变量的对象。之后,您可以在 BlockGenerator 方法中访问该对象并调用其方法并访问其实例变量。

    另一种方法是通过https://docs.unity3d.com/Documentation/ScriptReference/GameObject.FindGameObjectsWithTag.html在BlockGenerator中按标签查找对象,或通过http://docs.unity3d.com/Documentation/ScriptReference/Object.FindObjectOfType.html按类型搜索。

    【讨论】:

    • 我不想与检查器打交道,因为如果您有一个变量被多个脚本使用,那么将检查器中的对象拖到所有脚本会很麻烦。但是我使用了您建议的第二种方法。所以我标记了 GM GameObject 并在 BlockGenerator.js 中使用以下行来访问 ScreenWidth 函数: var screenWidth :float = GameObject.FindGameObjectWithTag("GM").GetComponent(GameSetup).ScreenWidth();
    猜你喜欢
    • 2022-07-02
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多