我目前正在研究狐狸和狐狸。兔子模拟,我完全坚持"育种"。
我建立模拟的方式,使用了三个脚本; “TheGame”,“FoxScript”和“RabbitScript。由于狐狸和兔子基本相同,我们可以减少这三到两个脚本; “RabbitScript”和“TheGame”。 RabbitScript附在相应的预制件上; “rabbitPrefab”,而TheGame附加到一个空的GameObject。
TheGame实例化了许多RabbitPrefab,然后移动,老化和繁殖。由于构建应该在稍后阶段收集和呈现数据,因此兔子被包括在列表中以及被计数。这个列表可以在主脚本中找到,当兔子繁殖时,后代需要包含在此列表中以及添加到计数器中。
我已尝试使用此方法实例化基元,并且它可以正常工作。
附在兔子脚本中的品种功能:
void Breed(){
float p = Random.Range (0.0f, 1.0f);
if (p < probability2breed) {
position = gameObject.transform.position;
TheGame.BreedRabbit(position);
}
}
TheGame脚本中的BreedRabbit方法:
public static void BreedRabbit(Vector3 position) {
GameObject rabbit = Instantiate(RabbitPrefab) as GameObject;
rabbit.transform.position = new Vector3(position);
Rigidbody gameObjectsRigidBody = rabbit.AddComponent<Rigidbody>();
rabbit.GetComponent<Rigidbody>().useGravity = false;
rabbit.name = "Rabbit#:" + rabbitCount;
rabbit.tag = "rabbittag";
rabbits.Add(rabbit);
rabbitCount++;
}
注意:(我认为很多代码似乎毫无意义,所以事先回答任何问题:我使用对撞机来处理所涉及的代理之间的交互,并且据我所知,这需要一个刚性的人。他们开始使用刚体摔倒,即使没有质量,所以我不得不转向重力。标签也是我对碰撞手柄所需要的理解。我可以跳过计数并只计算清单,但现在这不重要)< / p>
它不断要求对象引用,我只是无法弄清楚如何解决这个问题?
错误消息:&#34;非静态字段方法或属性需要对象引用&#34;
答案 0 :(得分:0)
我假设此行发生了对象引用错误?:
GameObject rabbit = Instantiate(RabbitPrefab) as GameObject;
如果是这种情况,可能是因为没有设置预制件,即脚本不知道RabbitPrefab是什么。
您可以在脚本中设置变量,然后将预制件拖到相应的插槽中进入检查器:
public GameObject theRabbitPrefab;
GameObject rabbit = Instantiate(theRabbitPrefab) as GameObject;
如果不是这种情况,您可以将问题编辑到收到错误的位置吗?当然错误说明错误产生的代码行是什么? :)
编辑:从Diego,如果是这种情况,你可以添加刚体并在预制件中配置它,你不需要在每个新兔子的代码中都这样做!