c# - 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!";
}
}
解决方案
首先,您应该以Awake
这种方式生成随机数,随机数只会创建一次,然后在您的onGuessEnter
方法中引用它。
在此示例中,我查看用户是否按下了Return
键,然后我将调用您的方法来查看猜测是否正确。
最后将整个脚本附加到 agameObject
然后在编辑器中将您的InputField
和Text
对象 拖到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!";
}
}
}
推荐阅读
- regex - 正则表达式:字符串中的符号恰好一次
- google-sheets - 如何在 Google 表格中使用 QUERY
- java - ZipEntry.getName() 返回完整路径,但 getName() 文档说它返回条目的名称。这是文档错误吗?
- java - 对于 x.715 和 x.915 使用 half_even 的 java 舍入错误
- ios - 随机复制单元格
- swift - Swift + Realm:如何从 collection.find 的范围内更改外部变量
- javascript - 无法读取未定义的属性(读取“parseComponent”)
- html - React 组件中的 HTML 表格行没有响应我的 CSS 样式以限制内容的高度
- java - 为什么Java找不到包?
- r - 使用 grep 将一列中的变量与另一列中的文本字符串匹配