【问题标题】:How to declare 2D float array in Unity c#?如何在 Unity c# 中声明 2D 浮点数组?
【发布时间】:2018-02-27 02:06:06
【问题描述】:

我目前正在开发一个游戏项目。我使用浮点值作为维度,因为我必须将多个棋子存储在网格的单个单元格中。

在某些时候我必须声明一个数组位置点用于选择和移动目的,所以我使用这个代码来声明

  public PlayerScript[,] Pawns {get; set;}

但默认情况下 [,] 的值被视为 int 并且每次我必须将它们类型转换为 int 以检查 if 条件。并且赋值语句不起作用。将值声明为浮点数是否可以编写相同的内容?

【问题讨论】:

  • 您能否澄清您的要求并提供更多背景信息?听起来您希望数组的 indexes 是浮点数;比如,你希望能够说Pawns[0.1f,3.14f]
  • 是的,无论我传递 [x,y] 的浮点值,都不接受。
  • xy 总是整数吗?
  • 不,它们是浮点数。如 0.25f、1.75f 等

标签: c# unity3d game-physics


【解决方案1】:

Arrays in C# can only be indexed by integer types, not floating point types。这是大多数编程语言的规范,目前尚不清楚其他情况下的语义是什么。

我建议重新考虑您使用的数据结构。您已经说明了要使用浮点数的原因是因为您希望网格的每个单元格中有多个对象。如果这是您使用浮点数的唯一原因,那么您可以为每个单元格使用 List<PlayerScript>,并且每个列表可以包含任意数量的 PlayerScripts。

public List<PlayerScript>[,] Pawns { get; set; }

在使用之前,您需要使用空列表对象填充每个单元格。

Pawns = new List<PlayerScript>[8,8];
for (int r = 0; r < 8; r++)
{
    for (int c = 0; c < 8; c++)
    {
        Pawns[r,c] = new List<PlayerScript();
    }
}

【讨论】:

    猜你喜欢
    • 2016-01-24
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多