如何在C#中将附加到游戏对象的一个​​脚本中的函数调用到另一个脚本?

时间:2016-05-31 02:43:26

标签: c# unity5

基本上我有一个脚本设置,在播放期间打印到控制台。

//Method to loop find question to be asked and print it as well as loop through answerText and print the appropriate answer options/
public void AskNewQuestion ()
{
    //prints Person: + apropriate question based on questionUpTo.
    Debug.Log ("Person:" + questionsText [questionUpTo]);
    //Loops through answersText and compares it to questionUpTo to find applicable answers.
    for (int i = 0; i < answerText[questionUpTo].Count; i++) 
    {
        //Prints applicable answers to console.
        Debug.Log(i+1 + ":" + answerText[questionUpTo][i]);
    }
}

现在我需要这个不打印到控制台,而是通过另一个处理画布的脚本,画布是我需要打印文本的地方。

public class Textboxmanager : MonoBehaviour {

    public GameObject textBox;

    public Text theText;

    public TextAsset textFile;
    public string[] textLines;

    public int currentLine;
    public int endAtLine;

    public bool isActive;

    // Use this for initialization
    void Start ()
    {
        if(textFile != null)
        {
            textLines = (textFile.text.Split('\n'));
        }

        if(endAtLine == 0)
        {
            endAtLine = textLines.Length - 1;
        }

        if(isActive)
        {
            EnableTextBox();
        }
        else
        {
            DisableTextBox();
        }
    }

    void Update()
    {
        if(!isActive)
        {
            return;
        }

        theText.text = textLines[currentLine];

        if(Input.GetKeyDown(KeyCode.Return))
        {
            currentLine += 1;
        }

        if(currentLine > endAtLine)
        {
            DisableTextBox();
        }
    }

    public void EnableTextBox()
    {
        textBox.SetActive(true);
    }

    public void DisableTextBox()
    {
        textBox.SetActive(false);
    }
}

2 个答案:

答案 0 :(得分:0)

有很多方法可以实现这一目标。首先,我注意到你试图打印到的脚本是各种各样的经理。在这种情况下,有一个名为Singletons的高级概念。

以下是如何在C-Sharp中实现单身人士的链接: https://unity3d.com/learn/tutorials/projects/2d-roguelike-tutorial/writing-game-manager

观看统一视频并确保这是解决问题的正确方法。

如果你不想走这条复杂的道路而宁愿避免头痛,那么我会尝试解释如何引用另一个脚本及其所有功能,变量和其他数据而不需要单身。

Class1 {
    public Class2 class2Reference;

    private void printTextFromClass2() {
        class2Reference.printAnswerText();
    }
}

Class2 {
    public void printAnswerText() {
        Debug.Log("String");
    }
}

在这个例子中你可以看到我有两个类,这些类可能在不同的脚本中,在Unity中完全不同的游戏对象。我们使用数据类型创建了一个变量作为我们尝试访问的类名。在这种情况下,数据类型为Class2。然后,我们在需要访问该脚本的任何时候将其用作变量。

你唯一要做的就是给它一个脚本来引用。就像字符串为空,直到我们给它一个值,我们的变量是私有的Class2 class2Reference&#39;在我们给它一个值之前它是null。

这很容易。保存并回归统一。你应该在检查器中看到你的变量&#34; none&#34;写在它旁边。将您的第二个脚本拖放到该框中,您应该准备隆隆声。

希望这能帮助你解决好友。

答案 1 :(得分:0)

在TextboxManager类中实例化AskNewQuestion类。

&#13;
&#13;
puclic TextboxManager : Monobehavior {
  AskNewQuestion askNewQuestion = new AskNewQuestion();
}
&#13;
&#13;
&#13;

在AskNewQuestion中创建一个返回数组字符串的函数。然后在TextboxManager类上调用它以获取数组字符串。像这样:textLines = askNewQuestion.questions;

编辑:您可以使用{ get; set; }方法。首先初始化存储字符串数组的位置,然后将其应用于{ get; set; }方法。

&#13;
&#13;
string[] questions;

public string[] Questions {
  get {
    return quesions;
  }
}
&#13;
&#13;
&#13;