Unity3D:如何从附加到预制件的其他脚本中调用一个脚本中的函数?

时间:2018-06-12 15:38:08

标签: c# unity3d

我有对象A和预制件B.在每个附加的脚本" ScriptA"和" ScriptB"。在" ScriptA"我需要来自" ScriptB"的呼叫功能。我试过这个(C#代码):

public ScriptB MyScript;
MyScript.function();

但我无法将对象A附加到公共变量" MyScript",我只看到交叉圆圈图标。有什么问题?

2 个答案:

答案 0 :(得分:1)

  

如何从附加到的其他脚本调用一个脚本中的函数   预制?

你不能直接这样做,因为这是一个预制件。要访问附加到预制件的脚本,请实例化预制件,然后使用GetComponent来获取脚本。

//Assign the prefab from the Editor
public GameObject prefab;
public ScriptB MyScript;

void Start()
{
    //Instantiate prefab 
    GameObject obj = Instantiate(prefab);

    //Get script attached to it
    MyScript = obj.GetComponent<ScriptB>();

    //Call the function
    MyScript.function();
}

如果ScriptB已经附加到场景中的GameObject(在层次结构选项卡中查看),那么您不必实例化它。只需找到GameObject,然后使用GetComponent来附加脚本。

ScriptB MyScript;

void Start()
{
    //Find the GameObject
    GameObject obj = GameObject.Find("NameOfGameObjectScriptBIsAttachedTo");

    //Get script attached to it
    MyScript = obj.GetComponent<ScriptB>();

    //Call the function
    MyScript.function();
}

答案 1 :(得分:-1)

如果您使用公共游戏对象,则可以参考该脚本。然后您可以参考脚本中的函数。

//This would be in script A

public gameObject objectB;

void Start () {
  objectB.functionB();
}

确保您的功能是public void

//This would be in script B

public void functionB () {
  //Do something
}