脚本中需要的“对象引用”

问题描述:

我目前正在对狐狸&兔子进行仿真,而我完全停留在“繁殖”上。脚本中需要的“对象引用”

我建立了模拟的方式,使用了三个脚本; “TheGame”,“FoxScript”和“RabbitScript”。由于狐狸和兔子本质上是一样的,我们可以把这三个减到两个脚本; “RabbitScript”和“TheGame”。 RabbitScript附加到相应的预制件上; “rabbitPrefab”,而TheGame被附加到一个空的GameObject。

TheGame实例化一些RabbitPrefabs,然后移动,年龄和品种。由于构建应该在稍后阶段收集和呈现数据,所以兔子被包括在列表中以及被计数。这个列表可以在主要脚本中找到,当兔子繁殖时,后代需要包含在这个列表中,并加入柜台。

我试过用这种方法实例化一个原语,它的工作原理。

品种功能连接到兔剧本:

void Breed(){ 
    float p = Random.Range (0.0f, 1.0f); 
    if (p < probability2breed) {   
      position = gameObject.transform.position; 
      TheGame.BreedRabbit(position); 
    } 
} 

而且BreedRabbit方法TheGame脚本:

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++; 
} 

注:(我想了很多的代码似乎毫无意义,所以要事先回答任何问题:我使用碰撞器来处理所涉及的代理之间的相互作用,并且根据我的理解,这需要一个刚体。刚体开始下落,即使没有质量,也必须转动重力。是我的理解需要编辑碰撞handlig以及我可能会跳过计数,只是计算清单,但现在应该不重要)

它不断要求一个对象引用,我只是不明白这是如何解决?

错误消息:“一个对象引用是所必需的非静态字段方法或属性”

+2

请发布实际的错误消息(控制台中显示的错误消息) –

+0

它是否提供了行号/类或脚本名称?如果是这样,请将其添加(并让我们知道您发布的代码中的哪一行对应,因此我们可以找出问题) –

我假定在这条线?:

GameObject rabbit = Instantiate(RabbitPrefab) as GameObject;

如果出现对象引用错误情况就是这样,这可能是因为预制没有设置,即脚本不知道RabbitPrefab是什么。

你可以设定在脚本中的变量,然后将你的预制到相应的插槽中插入检查:

public GameObject theRabbitPrefab;

GameObject rabbit = Instantiate(theRabbitPrefab) as GameObject;

如果不是这种情况,你可以编辑你的问题是你在哪里得到错误?当然,错误指出错误正在从哪个代码行生成? :)

编辑:从迭戈,如果是这样的话,你可以添加刚体并将其配置在你的预制件中,而且你不需要在每个新兔子的代码中都做到这一点!

+1

另请注意,如果是这种情况,则可以添加刚体并将其配置在预制,而且你不需要在每个新兔子的代码中执行它:) –

+0

这是我在这里得到的错误。但是当我尝试访问或使用“rabbitCount”时,我也遇到了错误。 – NorwegianViking

+0

rabbitCount在哪里定义? – Tom