【发布时间】:2013-11-24 10:48:49
【问题描述】:
我是游戏编程和 C# 的新手,但我有一些 javaScript 和 PHP 的编程经验。
好的,我们开始吧,我有一个 C# 脚本,我想用它来生成怪物。我一直在 Youtube 上关注 Tom Adamson,直到他开始生成随机值:UNITY3D C# with 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();
}
}
}
当我只有 2 个怪物时,这工作正常,但是当我尝试添加第三个怪物时,我得到这个错误:
IndexOutOfRangeException:数组索引超出范围。 (包装器 stelemref) 对象:stelemref (object,intptr,object) myMonster.Start () (at Assets/myMonster.cs: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++;
bigMonster[i] = new aMonster();
bigMonster[i].id = i;
bigMonster[i].name = "Tiny";
bigMonster[i].race = "Spider";
bigMonster[i].age = 90;
bigMonster[i].health = 45;
i++;
谁能告诉我我做错了什么?我猜 i++ 是错误的做法,因为第三个怪物导致了错误。
非常感谢任何帮助。
【问题讨论】:
-
您错误地使用了 for 循环。您应该在每个循环中添加一个怪物,并且每个循环 i 都会递增。
for (int i = 1; i <= 50;)应该是for (int i = 0; i < 51; i++) -
保持 i
-
@Tobberoth:这里的用法有点奇怪,但本身并没有错。括号中的三个部分中的任何一个都可以省略,只要分号仍然存在以标记部分开始/结束的位置。当存在三种不同类型时,祝您每次迭代添加一个怪物好运。当您以可接受的方式开始做这件事时,您可能已经完成了这里正在做的事情。
-
@cHao:确实如此。我猜这个非常基本的概念只是……很奇怪。为什么要将单个怪物多次添加到阵列中,这没有任何意义。要么单独创建怪物并添加到数组中,要么使用 for 循环多次添加怪物。
-
这很有意义,如果您考虑一下意图。如果你想要一个均匀分布的怪物,你可以预先计算出你想要多少个,然后将每个怪物添加 X 次,或者你可以简单地继续添加一组直到你有足够的数量。两者都行,但后者需要较少的准备工作。