C# 创建具有for循环生成id';s

C# 创建具有for循环生成id';s,c#,for-loop,unity3d,C#,For Loop,Unity3d,我不熟悉游戏编程和C#,但我有一些javaScript和PHP编程经验 好了,我们开始吧,我有一个C#脚本,我想用它来生成怪物。我一直在Youtube上关注Tom Adamson,直到他开始生成随机值,如图所示: 这是我的剧本: using UnityEngine; using System.Collections; public class myMonster : MonoBehaviour { public class aMonster { //The prop

我不熟悉游戏编程和C#,但我有一些javaScript和PHP编程经验

好了,我们开始吧,我有一个C#脚本,我想用它来生成怪物。我一直在Youtube上关注Tom Adamson,直到他开始生成随机值,如图所示:

这是我的剧本:

using UnityEngine;
using System.Collections;

public class myMonster : MonoBehaviour {

    public class aMonster {

        //The properties
        public int id;
        public int age;
        public string name;
        public string race;
        public int health;

        //A method
        public void monsterData() {
            print("ID: "        + id);
            print("Race: "      + race);
            print("Name: "      + name);
            print("Age: "       + age);
            print("Health: "    + health);
        }

    } // End of class definition

//-----------------------------------------------------------------------------------------

    void Start () {

        aMonster[] bigMonster = new aMonster[51];

        for (int i = 1; i <= 50;) {

            bigMonster[i] = new aMonster();
            bigMonster[i].id = i;
            bigMonster[i].name = "Gorky";
            bigMonster[i].race = "Orc";
            bigMonster[i].age = 320;
            bigMonster[i].health = 200;
            i++;

            bigMonster[i] = new aMonster();
            bigMonster[i].id = i;
            bigMonster[i].name = "Runathu";
            bigMonster[i].race = "Shaman";
            bigMonster[i].age = 670;
            bigMonster[i].health = 100;
            i++;

        }

        for (int i = 1; i <= 2; i++) {
            bigMonster[i].monsterData();
        }

    }

}
谁能告诉我我做错了什么?我猜i++是错误的方法,因为第三个怪物导致了错误

非常感谢您的帮助

aMonster[] bigMonster = new aMonster[51];
意味着你有51个怪物(最大索引=50),但你在一个循环中增加了两次i,在最后一次迭代中i=50,所以你试图达到
aMonster[51]

修正:

从i=0开始循环并在i=49结束,c#中的索引从0开始而不是从1开始

我还建议您将代码转换为:

    for (int i = 0; i < 50; i+=2) 
    {

        bigMonster[i] = new aMonster();
        bigMonster[i].id = i;
        bigMonster[i].name = "Gorky";
        bigMonster[i].race = "Orc";
        bigMonster[i].age = 320;
        bigMonster[i].health = 200;


        bigMonster[i+1] = new aMonster();
        bigMonster[i+1].id = i;
        bigMonster[i+1].name = "Runathu";
        bigMonster[i+1].race = "Shaman";
        bigMonster[i+1].age = 670;
        bigMonster[i+1].health = 100;

    }
for(int i=0;i<50;i+=2)
{
大怪物[i]=新的阿蒙斯特();
大怪物[i].id=i;
大怪物[i].name=“高尔基”;
大怪物[i].race=“兽人”;
大怪物[i].年龄=320;
大怪物[i].生命值=200;
大怪物[i+1]=新的阿蒙斯特();
大怪物[i+1].id=i;
大怪物[i+1].name=“Runathu”;
大怪物[i+1]。种族=“萨满”;
大怪物[i+1]。年龄=670;
大怪物[i+1]。生命值=100;
}
for循环的增量应该在for循环的定义中完成,它看起来更干净

编辑:

使用
List()

var bigMonster=newlist();
var-id=0;
对于(int i=0;i
意味着你有51个怪物(最大索引=50),但你在一个循环中增加了两次i,在最后一次迭代中i=50,所以你试图达到
aMonster[51]

修正:

从i=0开始循环并在i=49结束,c#中的索引从0开始而不是从1开始

我还建议您将代码转换为:

    for (int i = 0; i < 50; i+=2) 
    {

        bigMonster[i] = new aMonster();
        bigMonster[i].id = i;
        bigMonster[i].name = "Gorky";
        bigMonster[i].race = "Orc";
        bigMonster[i].age = 320;
        bigMonster[i].health = 200;


        bigMonster[i+1] = new aMonster();
        bigMonster[i+1].id = i;
        bigMonster[i+1].name = "Runathu";
        bigMonster[i+1].race = "Shaman";
        bigMonster[i+1].age = 670;
        bigMonster[i+1].health = 100;

    }
for(int i=0;i<50;i+=2)
{
大怪物[i]=新的阿蒙斯特();
大怪物[i].id=i;
大怪物[i].name=“高尔基”;
大怪物[i].race=“兽人”;
大怪物[i].年龄=320;
大怪物[i].生命值=200;
大怪物[i+1]=新的阿蒙斯特();
大怪物[i+1].id=i;
大怪物[i+1].name=“Runathu”;
大怪物[i+1]。种族=“萨满”;
大怪物[i+1]。年龄=670;
大怪物[i+1]。生命值=100;
}
for循环的增量应该在for循环的定义中完成,它看起来更干净

编辑:

使用
List()

var bigMonster=newlist();
var-id=0;

对于(int i=0;i从0开始迭代

for (int i = 1; i <= 50;) 

for(int i=1;i从0开始迭代

for (int i = 1; i <= 50;) 

for(int i=1;i为了使事情更简单,我将使用列表而不是数组。表示法也将更简单,例如:

var bigMonster = new list<aMonster>();

for(int i = 1; i <=50; )
{
  var mon1 = new aMonster{id = i, name = "Gorky", race = "orc", age = 320, health = 200};
        i++;
  var mon2 = new aMonster{id = i, name = "Runathu", race = "Shaman", age = 670, health = 100};
        i++;
  var mon3 = new aMonster{id = i, name = "Tiny", race = "Spider", age = 90, health = 45};
        i++;
  bigMonster.Add(mon1);
  bigMonster.Add(mon2);
  bigMonster.Add(mon3);
}

foreach(aMonster a in bigMonster)
{
  a.monsterData();
}
var bigMonster=newlist();

对于(int i=1;i为了使事情变得更简单,我将使用列表而不是数组。表示法也将更简单,例如:

var bigMonster = new list<aMonster>();

for(int i = 1; i <=50; )
{
  var mon1 = new aMonster{id = i, name = "Gorky", race = "orc", age = 320, health = 200};
        i++;
  var mon2 = new aMonster{id = i, name = "Runathu", race = "Shaman", age = 670, health = 100};
        i++;
  var mon3 = new aMonster{id = i, name = "Tiny", race = "Spider", age = 90, health = 45};
        i++;
  bigMonster.Add(mon1);
  bigMonster.Add(mon2);
  bigMonster.Add(mon3);
}

foreach(aMonster a in bigMonster)
{
  a.monsterData();
}
var bigMonster=newlist();

for(int i=1;i)您错误地使用了for循环。您应该为每个循环添加一个怪物,并且每个循环i递增。
for(int i=1;我保留它i@Tobberoth:这里的用法有点奇怪,但本身并不错误。只要分号仍然在那里标记部分开始/结束的位置,就可以省略paren中的三个部分中的任何一个。如果有三种不同的类型,祝你好运,每次迭代都会添加一个怪物。当你已经熟悉了to以一种可接受的方式这样做,你可能已经完成了这里正在做的事情。@cHao:没错。我想最基本的概念只是…奇怪。为什么要将单个怪物多次添加到阵列中,这是没有意义的。要么单独创建怪物并添加到阵列中,要么使用for循环多次添加怪物。我如果你想让怪物均匀分布,你可以预先计算出每个怪物的数量,然后将每个怪物添加X次,或者你可以简单地继续添加一组怪物,直到你有足够的怪物为止。两者都可以,但后者需要较少的准备工作。你正在使用for循环不正确。您应该为每个循环添加一个怪物,并且每个循环i都会递增。
for(int i=1;我保留它i@Tobberoth:这里的用法有点奇怪,但本身并不错误。只要分号仍然在那里标记部分开始/结束的位置,就可以省略paren中的三个部分中的任何一个。如果有三种不同的类型,祝你好运,每次迭代都会添加一个怪物。当你已经熟悉了to以一种可接受的方式这样做,你可能已经完成了这里正在做的事情。@cHao:没错。我想最基本的概念只是…奇怪。为什么要将单个怪物多次添加到阵列中,这是没有意义的。要么单独创建怪物并添加到阵列中,要么使用for循环多次添加怪物。我如果你想让怪物分布均匀,你可以预先计算出每个怪物的数量,然后将每个怪物添加X次,或者你可以继续添加一组怪物,直到你有足够的怪物为止。两者都可以,但后者需要更少的准备工作。谢谢你帮助我获得ng开始,我现在从0开始,到49结束,但是如何继续添加怪物呢?我在理解如何正确使用for循环时遇到了问题。下面是我现在所做的,它显示了相同的错误:
void Start(){aMonster[]bigmonester=new aMonster[50];for(int i=0;i@Dan LeviTømta现在您在for循环中又增加了一次,所以情况是一样的。首先,您可以使用列表并避免索引自动失效。我建议您使用我的c