首页 > 解决方案 > Unity 无法从函数外部访问随机数

问题描述

我想做一个数字猜谜游戏,让计算机猜你的数字,你也可以猜出它的数字,但在最后,我做了一个随机数生成器,但遇到了一个问题。

我命名了我的函数onGuessEnter,当玩家在输入他的猜测后点击回车时调用它,我的问题是,如果我运行游戏(Visual Studio 没有对此产生问题)Unity 由于包含以下行的错误而停止:

RandomRangeInt 只能从主线程调用。

(如果我将随机生成器放入函数中,它会在每次输入命中时生成一个新的随机数)

有人可以帮助我使输入字段和随机生成器一起工作吗?(我的意思是它必须只生成一次随机数,而不是总是在按下 Enter 按钮时生成一个随机数,我可以从 onGuessEnter 访问该随机数)

using UnityEngine;
using System.Collections;
using UnityEngine.UI;


public class GuessManagerScript : MonoBehaviour {

public InputField input;
public Text text;
int random = Random.Range(0, 1000);

public void onGuessEnter() {

    print(random);
    int inum = int.Parse(input.text);

    if (inum == random) 
        text.text = "Congrats, you guessed it!";
    else if (inum < random)
        text.text = "Bigger!";
    else if (inum > random) 
        text.text = "Smaller!";
   }
}

标签: c#unity3drandomint

解决方案


首先,您应该以Awake这种方式生成随机数,随机数只会创建一次,然后在您的onGuessEnter方法中引用它。
在此示例中,我查看用户是否按下了Return键,然后我将调用您的方法来查看猜测是否正确。
最后将整个脚本附加到 agameObject然后在编辑器中将您的InputFieldText对象 拖到GuessManagerScript.

public class GuessManagerScript : MonoBehaviour {
int random; 
   void Awake(){
       random= Random.Range(0, 1000);
      }
    void Update() {
        if (Input.GetKeyDown(KeyCode.Return))
            {
                onGuessEnter();  
             }
     }

public void onGuessEnter() {
    int inum = int.Parse(input.text);

    if (inum == random) 
        text.text = "Congrats, you guessed it!";
    else if (inum < random)
        text.text = "Bigger!";
    else if (inum > random) 
        text.text = "Smaller!";
     }
   }
 }

推荐阅读