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对函数进行逐步评估,以准确了解发生了什么。除此之外,为每个步骤添加
    Debug.Log
    s

  • 检查所有产卵鸡的层次结构。也许他们是残疾人

现在谈其他问题:

  • 请遵循C#约定编写代码。Chkn和Loc是最不直观的

  • >P>如果在评价距离时忽略Z位置,请考虑使用矢量2。距离。

  • 对于只在一个函数中使用的值使用字段是没有用的。只需将
    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对函数进行逐步评估,以准确了解发生了什么。除此之外,为每个步骤添加
    Debug.Log
    s

  • 检查所有产卵鸡的层次结构。也许他们是残疾人

现在谈其他问题:

  • 请遵循C#约定编写代码。Chkn和Loc是最不直观的

  • >P>如果在评价距离时忽略Z位置,请考虑使用矢量2。距离。

  • 对于只在一个函数中使用的值使用字段是没有用的。只需将
    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
(动作主题)