在 Forloop 中以非常规方式使用的提醒

问题描述 投票:0回答:1

interent 上有一个脚本以一种奇怪的方式在 forloop 中使用模数运算符 %,我无法理解它代表什么。具体来说,代码是针对 Unity 的,但也许即使是纯 C# 程序员也能理解这里发生了什么。是这个:

Vector2[] verts = new Vector2 [sideCount];

for(int i = 0; i < sideCount; i++)
{
  verts[i] = AngToDir(i*TAU / sideCount);
}

for(int i = 0; i < sideCount; i++)
{
  Gizmos.DrawLine(verts[i], verts[(i+1)%sideCount]);
}

我知道模数 % 是一个提醒,并把除法的其余部分还给你,但我不明白这里是如何使用的。谁能帮我理解一下?

c# unity3d for-loop unityscript modulo
1个回答
0
投票

这里使用模运算符来确保用于访问 verts 数组的索引始终保持在数组的范围内,即使索引超过数组的长度。

例如,如果

sideCount
值为 6 & 我们试运行
Gizmos.DrawLine
的值将是

Gizmos.DrawLine(verts[0], verts[1]);
Gizmos.DrawLine(verts[1], verts[2]);
Gizmos.DrawLine(verts[2], verts[3]);
Gizmos.DrawLine(verts[3], verts[4]);
Gizmos.DrawLine(verts[4], verts[5]);
Gizmos.DrawLine(verts[5], verts[0]);

注意最后一条记录,i 的值为 5

(i+1) % sideCount
计算结果为 0.

简而言之,模数运算符

%
用于在索引
i+1
到达末尾时将其包装回数组的开头。

© www.soinside.com 2019 - 2024. All rights reserved.