我在Unity中制作了一个类似大亨的游戏,游戏是关于机器人之类的东西,你有一个机器人目录,我一直在尝试一个代码,示例化机器人,但你可以得到两个相同的机器人,想法是,如果我示例化机器人#1,我不能示例化它更多。我尝试了一个代码,但不太工作。
if (position == 1)
{
robot1 = Resources.Load ("Prefabs/Robots/" + theRobo.identifier, typeof (GameObject)) as GameObject;
Instantiate(effect, spawnPosition1.position, Quaternion.identity);
Instantiate(robot1, spawnPosition1.position, Quaternion.identity);
finder1 = GameObject.Find(theRobo.recognizer);
if (finder1.GetComponent<RobotBehaviour>().created == false)
{
finder1.GetComponent<RobotBehaviour>().created = true;
}
else
{
finder1.gameObject.SetActive(false);
finder1.GetComponent<Collider2D>().enabled = false;
}
}
“position”变量是机器人的位置,“robot1”是机器人标识符,“finder1”在示例化时找到“Robot(Clone)”对象,主要问题是代码总是示例化,即使它是“创建的”,由于游戏中的六个位置,此代码重复了6次。我也直接访问了预制件,但它永远改变了它。
请帮忙
3条答案
按热度按时间mwecs4sa1#
你不能
您将需要找到一些其他方法来确定如何存储需要访问的数据。
以下是一些例子:
static
(该值在任何地方都只有一个“副本”,可以随时从任何地方访问)GameObject.Find()
。其次,这一行:
在此行之后运行:
这意味着在您知道是否 * 应该 * 创建克隆之前,您就在创建克隆(如果不需要克隆,您就不会销毁它)。
5vf7fwbs2#
你需要一个列表/计数器,其中包含该类型的所有机器人。然后,它是一个简单的数字检查:
如何管理列表/计数器取决于你。只是不要忘记在他们离开游戏时从列表中删除东西/减少计数器。或者如果游戏重新启动。
fnx2tebb3#
你可以有一个静态变量,作为一个计数器,并在构造函数中递增它。之后,你可以检查变量是否超过了一个期望的数量,并基于此,你可以有一个回调方法,要么删除对象,要么不删除。