Unity & C# - 从数组中选择一个随机字符串
Posted
技术标签:
【中文标题】Unity & C# - 从数组中选择一个随机字符串【英文标题】:Unity & C# - Choosing a random string from an array 【发布时间】:2020-11-01 06:27:15 【问题描述】:我正在尝试制作一个简单的石头剪刀布游戏。我需要计算机从 ROCK、PAPER 和 SCISSORS 数组中随机选择一个字符串。这是我目前所拥有的:
public string GetComputerChoice()
string computerChoice = null;
string[] computerChoices = "ROCK", "PAPER", "SCISSORS" ;
return computerChoice[Random.Next(computerChoices.Length)];
我在 Visual Studio 中遇到的唯一错误是“下一个”,它显示“随机不包含“下一个”的定义。
我对整个编程完全陌生。关于为什么这不起作用或我可以做些什么来使它起作用的任何提示? 我已经阅读了类似帖子的其他回复,但似乎所有答案都只是代码块,无法解释其工作原理。
【问题讨论】:
我怀疑System.Random
与 UnityEngine.Random
的命名空间冲突 ...您可以使用 Random.Range(0, computerChoices.Length)
这也回答了你的问题:***.com/questions/2019417/…?
【参考方案1】:
Next()
方法不是静态的,因此您需要实例化一个 Random
对象才能使用它:
public string GetComputerChoice()
string computerChoice = null;
string[] computerChoices = "ROCK", "PAPER", "SCISSORS" ;
return computerChoice[new Random().Next(computerChoices.Length)];
但是,每次需要随机值时都创建一个新的 Random
对象并不是最佳做法,并且可能会导致意外结果(例如重复值),尤其是在快速连续调用时,因为 PRNG 种子中使用了当前时间价值(阅读pseudo random number generators 的工作原理)。理想情况下,您会创建一个 Random
对象并将其存储在某个地方以供重复使用。
我对 Unity 一点也不熟悉,但它看起来有自己的 Random 类来帮助你:Unity Random - Documentation
【讨论】:
对于每一帧的使用,Unitys 随机实现也是推荐的【参考方案2】:你应该替换下面的行
return computerChoice[Random.Next(computerChoices.Length)];
这条线
return computerChoice[new Random().Next(computerChoices.Length)];
为什么?:
因为 Random 是一个 static 类,您不能通过 new
关键字创建它的实例。
原因是静态类在线程(包含您的请求的上下文)和发出请求的 user a
之间共享,exactly
和 same class
在同一 memory location
中 user b
使用它。
你可以把静态类看成是多个家庭都在使用的shared room
,它不只是你的,那么你无权做任何改变,你可以使用它!
当你在你的代码中使用new
关键字时,实际上你是making an instance of that class
that just belong to you
(你:意味着你提出的请求)。
【讨论】:
这很有帮助。我很感激!以上是关于Unity & C# - 从数组中选择一个随机字符串的主要内容,如果未能解决你的问题,请参考以下文章
在输入字段 c# 中的 Unity 上显示从日历中选择的日期
如何使用 C# 从字符串数组制作类似枚举的 Unity 检查器下拉菜单?