【发布时间】:2019-09-30 18:13:14
【问题描述】:
这是我关于 Stack Overflow 的第一个问题。我是编码新手,所以请耐心等待我和我可怕的代码。
void ChickenInstantiate()
{
LocOfChkn.Add(spawnLoc);
int i = 0;
for (int ChickenCount = 0; ChickenCount < maxChickenCount; ChickenCount++)
{
while (Vector3.Distance(spawnLoc, LocOfChkn[i]) < 2)
{
spawnLoc = new Vector3(Random.Range(randXMin, randXMax), Random.Range(randYMin, randYMax), 1);
spawnLoc.z = 5;
i += 1;
if (i >= LocOfChkn.Count)
{
break;
}
}
Instantiate(ChickenPrefab1, spawnLoc, Quaternion.identity);
LocOfChkn.Add(spawnLoc);
i = 0;
}
}
这是一些用于安装预制件的代码,但要确保它不会在一个区域内实例化,坦率地说,我不知道应该如何修复它——它完全坏了;鸡没有出现,我什至不确定它们是否在正确的区域产卵,等等(spawnLoc 的第一个实例是在启动时定义的,顺便说一句)
我正在使用当前最新版本的统一和视觉工作室。
【问题讨论】:
-
ChickenInstantiate在哪里调用? -
提示:1) 使您的命名描述性。避免使用“Loc”而不是“Location”、“Chkn”而不是“Chicken”以及其他此类首字母缩写词废话。没关系对他人的可读性;您将花费 分钟 尝试尽快破译和理解自己的代码,以节省一些 几分之一秒 的打字时间;只需使用 IDE 的自动完成热键,您就可以保存除第一次之外的所有内容。
-
2) 决定一个命名约定并遵循它。对于任何给定类型的数据,即字段、方法、类等,您不应该在一个地方有camelCase,在另一个地方有PascalCase,在另一个地方有snake_case。命名约定将为您节省时间和理智。我建议像 Rider / Resharper 中默认的那样。这是我在尝试了许多其他命名约定后使用的。谷歌它,你会找到它。 --- 顺序也很重要。如果您使用主题-动作,例如
chickenMovementhere,请不要使用movementOfChiken(action-subject) there。但这还不够标准化。 -
假设 spawnLoc 是一个
Vector3,它不是一个“实例”,它是一个结构。这意味着在将其添加到LocOfChkn之后对其进行修改将不会执行任何操作。
标签: c# unity3d instantiation