繁体   English   中英

脚本中需要“对象引用”

[英]“Object reference” needed in script

我目前正在对狐狸和兔子进行仿真,并且完全专注于“繁殖”。

我建立模拟的方式是使用三个脚本。 “ TheGame”,“ FoxScript”和“ RabbitScript”。 由于狐狸和兔子本质上是相同的,因此我们可以将这三个脚本简化为两个脚本。 “ RabbitScript”和“ TheGame”。 RabbitScript附加到各自的预制件上; “ rabbitPrefab”,而TheGame附加到一个空的GameObject。

TheGame实例化了许多RabbitPrefab,然后进行移动,老化和繁殖。 由于应该在以后的阶段收集并显示数据,因此将兔子包括在列表中并进行计数。 该列表可在主脚本中找到,当兔子繁殖时,后代需要包括在此列表中,并添加到计数器中。

我尝试用这种方法实例化一个原语,并且它可以工作。

兔子脚本中的Breed函数:

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

注意:(我认为很多代码似乎毫无意义,因此请事先回答任何问题:我使用对撞机来处理所涉及代理之间的相互作用,并且据我所知,这需要一个刚体。有了刚体,它们就开始掉落,甚至没有质量,所以我不得不转向重力。据我所知,这些标签也是碰撞handlig所需要的。我可能可以跳过计数而只计算列表,但现在不重要了。

它一直在要求对象引用,而我只是想不通如何解决?

错误消息:“非静态字段方法或属性需要对象引用”

我假设对象引用错误发生在此行?:

GameObject rabbit = Instantiate(RabbitPrefab) as GameObject;

如果是这种情况,则可能是因为尚未设置预制件,即脚本不知道RabbitPrefab是什么。

您可以在脚本中设置一个变量,然后将预制件拖到检查器中相应的插槽上:

public GameObject theRabbitPrefab;

GameObject rabbit = Instantiate(theRabbitPrefab) as GameObject;

如果不是这种情况,您可以将问题编辑到出现错误的位置吗? 错误肯定会指出错误是从哪一行代码生成的? :)

编辑:从迭戈,如果是这种情况,您可以在预制件中添加刚体并对其进行配置,而无需在代码中为每只新兔子做它!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM