【问题标题】:Random Numbers in Unity3D?Unity3D中的随机数?
【发布时间】:2015-03-25 13:15:53
【问题描述】:

我发现了如何创建随机数。伟大的。但是,此解决方案不适用于其他功能。为了创建一个随机数,我使用了

Random randomDirection = new Random();
int directionChoice = randomDirection.Next(1, 4); 

在名为enemyWalk(){}的函数内部;

但是,这导致了一个错误:

类型“UnityEngine.Random”不包含“下一个”的定义,并且 找不到“UnityEngine.Random”类型的扩展方法“Next” (您是否缺少 using 指令或程序集引用?)

当我将随机整数生成器从函数中取出时,不会出现此错误。有什么办法可以解决这个问题?

我希望使用此代码让我的敌人在不做任何事情时四处游荡,方法是随机选择一个整数来决定他走的方向(上、左、右或下),然后使用随机双精度生成器确定它行走的距离。但是,每当调用 enemyWalk(){}; 时,我都需要生成一个随机数。

【问题讨论】:

  • 当您使用 Unity 时,是否允许您使用 .NET System.Random 类?如果是这样,您应该使用它(正如 Bradley 建议的那样)。如果不是,你应该在你的问题中明确这一点。

标签: c# random unity3d artificial-intelligence


【解决方案1】:

在Unity C#中方法如下

Random.Range(minVal, maxVal);

Unity Documentation - Random

该方法将接受整数或浮点参数。如果使用整数 minValinclusive 并且 maxValexclusive 返回的随机值。在您的情况下,它将是:

Random.Range(1,4);

而不是Next(1,4)

如果使用浮点数,例如

Random.Range(1.0F, 3.5F);

返回值也是一个浮点数,minValmaxVal 在这种情况下包含

【讨论】:

  • 这非常有效。但是,有没有办法为浮点数做这样的事情?我希望让我的角色走 3.5 米之类的路线。
  • maxVal 专用于 Range 的整数重载
  • 我的错误。已编辑。根据文档,此方法支持将浮点数作为重载之一。
【解决方案2】:

简单的解决方案是只使用 .NET 的 Random 类,它恰好位于 System 命名空间中:

using System;

...

//Or System.Random without the using
Random randomDirection = new Random();
int directionChoice = randomDirection.Next(1, 5);

如果您想使用 Unity,请致电 Range 而不是 Next

int directionChoice = randomDirection.Range(1, 5);

注意“max”在这两种情况下都是排他的,所以你应该使用 5 来返回 1 到 4 之间的值(包括 4)

获取随机float

Random.NextDouble(); //careful, this is between 0 and 1, you have to scale it
//Also, this one is exclusive on the upper bound (1)

Random.Range(1f, 4f); //max is inclusive now

【讨论】:

  • 这可能看起来很愚蠢(我是新手,抱歉),但我不确定我是否正确使用了这个。当我插入这个时,我得到了同样的错误,但这次它说“找不到命名空间名称'Math'的类型。”但是,我不确定是否需要集成 .NET?另外,我没有在任何地方使用 System.Math,我不确定是否必须。
  • @GrantWinney float 版本包含在内,int 版本独占。这取决于调用哪个重载。我相信 int 会在上述情况下。
  • @Jeff 如果顶部没有using System,请尝试添加它,或者使用System.Math.Random 代替Math.Random。我无法想象你不被允许在 Unity 项目中使用System...
  • @BradleyDotNet 是的,这是有道理的。允许使用系统。
  • @PeterDuniho 我实际上说的是System.Math,但我认为他在顶部有一个using System。我将它添加到我的代码中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多