C# 关于实例化的建议?
这是我关于堆栈溢出的第一个问题。我是个编程新手,所以请容忍我和我可怕的代码C# 关于实例化的建议?,c#,unity3d,instantiation,C#,Unity3d,Instantiation,这是我关于堆栈溢出的第一个问题。我是个编程新手,所以请容忍我和我可怕的代码 void ChickenInstantiate() { LocOfChkn.Add(spawnLoc); int i = 0; for (int ChickenCount = 0; ChickenCount < maxChickenCount; ChickenCount++) { while (Vector3.Dista
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;
}
}
void chickenstantiate()
{
LocOfChkn.Add(LOC);
int i=0;
对于(int-ChickenCount=0;ChickenCount=LocOfChkn.Count)
{
打破
}
}
实例化(ChickenPrefable1、spawnLoc、四元数.identity);
LocOfChkn.Add(LOC);
i=0;
}
}
这是一些用于安装预制件的代码,但要确保它不会在某个区域内实例化,坦率地说,我不确定该如何修复它——它完全被破坏了;鸡不会出现,我甚至不确定它们是否在正确的区域产卵,等等。(顺便说一句,第一个spawnLoc实例是在启动时定义的)
我正在使用unity和visual studio的最新版本。- 您应该
为添加到
的第一个位置实例化一只鸡。这既可以确保您的代码正在运行,又可以避免出现胆小的地方locOfChkn
- 使用VSCode或您喜爱的IDE对函数进行逐步评估,以准确了解发生了什么。除此之外,为每个步骤添加
sDebug.Log
- 检查所有产卵鸡的层次结构。也许他们是残疾人
- 请遵循C#约定编写代码。Chkn和Loc是最不直观的
- 对于只在一个函数中使用的值使用字段是没有用的。只需将
设置为spawnLoc
内的变量即可chickenstantiate
void InstantiateChicken()
{
List<Vector3> chickenPositions = new List<Vector3>();
for (int i = 0; i < maxChickenCount; i++)
{
bool doesCollide;
Vector3 spawnLocation;
do
{
spawnLocation = new Vector3(
Random.Range(randXMin, randXMax),
Random.Range(randYMin, randYMax),
5);
doesCollide = false;
foreach (var pos in chickPositions)
{
if (Vector2.Distance(pos, spawnLocation) < 2f)
doesCollide = true;
}
}
while (doesCollide);
Instantiate(chickenPrefab1, spawnLocation, Quaternion.identity);
chickenPositions.Add(spawnLocation);
}
}
void实例化echicken()
{
List chickenPositions=新列表();
for(int i=0;i
或者,只需手动放置所有小鸡,并使它们在产卵时以随机因子偏移位置。- 您应该
为添加到
的第一个位置实例化一只鸡。这既可以确保您的代码正在运行,又可以避免出现胆小的地方locOfChkn
- 使用VSCode或您喜爱的IDE对函数进行逐步评估,以准确了解发生了什么。除此之外,为每个步骤添加
sDebug.Log
- 检查所有产卵鸡的层次结构。也许他们是残疾人
- 请遵循C#约定编写代码。Chkn和Loc是最不直观的
- 对于只在一个函数中使用的值使用字段是没有用的。只需将
设置为spawnLoc
内的变量即可chickenstantiate
void InstantiateChicken()
{
List<Vector3> chickenPositions = new List<Vector3>();
for (int i = 0; i < maxChickenCount; i++)
{
bool doesCollide;
Vector3 spawnLocation;
do
{
spawnLocation = new Vector3(
Random.Range(randXMin, randXMax),
Random.Range(randYMin, randYMax),
5);
doesCollide = false;
foreach (var pos in chickPositions)
{
if (Vector2.Distance(pos, spawnLocation) < 2f)
doesCollide = true;
}
}
while (doesCollide);
Instantiate(chickenPrefab1, spawnLocation, Quaternion.identity);
chickenPositions.Add(spawnLocation);
}
}
void实例化echicken()
{
List chickenPositions=新列表();
for(int i=0;i
或者,只需手动放置所有小鸡,并使它们在产卵时以随机因子偏移其位置。小鸡稳定化在哪里?提示:1)让你的名字具有描述性。避免使用“Loc”而不是“Location”,“Chkn”而不是“Chicken”,以及其他类似的首字母缩略词。对其他人来说,绝对不可读;你要花上几分钟的时间去破解和理解你自己的代码,只为了节省几秒钟的打字时间;只要使用IDE的“自动完成”热键,就可以在第一次以外的任何时间保存。2)确定命名约定并遵循它。对于任何给定类型的数据,即字段、方法、类等,您不应该在一个位置使用camelCase,在另一个位置使用PascalCase,在另一个位置使用snake_。命名约定将节省您的时间和理智。我建议使用一些类似于Rider/Resharper中默认设置的内容。这是我在尝试了许多其他命名约定后使用的。用谷歌搜索,你就会找到它秩序也很重要。如果你在这里使用主题动作,比如
chickenmovation
,不要使用movementOfChiken
(动作主题)