数组在选择随机项 C#/Unity 时不给出越界错误消息

Posted

技术标签:

【中文标题】数组在选择随机项 C#/Unity 时不给出越界错误消息【英文标题】:Array doesnt give an Out of bounds Error Message while picking a Random item C#/Unity 【发布时间】:2020-11-08 20:35:22 【问题描述】:

我有一个初学者问题。为什么这段代码不会产生错误信息?

public Tile[] tiles = new Tile[2];
...
SetTile(0, 0, 0, nocollide, tiles[Random.Range(0,2)]);

数组中有两个项目,但我选择一个从 0 到 2 的值,即三个项目。当我达到 0,1 时,它只会选择第一个项目。但为什么呢?

【问题讨论】:

是this Random.Range 吗?然后它返回一个浮点数,使其达到 2.0 完全不太可能(但并非不可能)。并且任何 1.9999999999 都将被截断为 1。- 你应该使用一个随机函数来代替你的整数。 因为 Random.Range 方法返回一个在 [0,2) 范围内的数字,这意味着结果可以是 1,0 但不能是 2 (哦,没有看到基于 int 的重载;文档的格式很奇怪) 【参考方案1】:
public static int Range(int min, int max);

说明

原因很简单,返回一个介于 min [inclusive] 和 max [exclusive] 之间的随机整数(只读)。

max 是独有的。 Random.Range(0, 10) 可以返回 0 到 9 之间的值。

如果你想包含最大值,那么你可以使用下面的重载方法。

public static float Range(float min, float max);

说明

返回一个介于 min [inclusive] 和 max [inclusive] 之间的随机浮点数(只读)。

最大值是包含。 Random.Range(0.0f, 1.0f) 可以返回 1.0 作为值。

参考:https://docs.unity3d.com/ScriptReference/Random.Range.html

【讨论】:

@PeterPeperoni SO 是学习和分享的最佳平台

以上是关于数组在选择随机项 C#/Unity 时不给出越界错误消息的主要内容,如果未能解决你的问题,请参考以下文章

C# Unity如何只选择数组中的一项并取消选择其他项

一道经典面试题讲解 :数组越界而没报错 ,却出现死循环 ?(C语言)

unity3d,怎么吧很多对象存储到一个数组里面,在用到的时候随机选择一个.

越界访问数组有多危险?

如何从 Julia 的加权数组中选择一个随机项?

选择时不显示 C# 下拉列表项颜色