我的预制件上有单独的脚本,当我希望它们引用不同的对象时,它们都做同样的事情

问题描述

在我的游戏中,我有一个简单的立方体预制件。在这个立方体上,我有一个名为“ Lore”的脚本。还有一个盒式对撞机,它是我制作触发器的立方体的3倍,并赋予了标签“ Lore”。 就这些。 在我的立方体预制件下面(作为儿童),我创建了一个名为“消息”的画布。 因此,每个Cube预制件都有一个对撞机,Lore脚本。还有一个名为Message的画布。

在PlayerMovement脚本中,我创建了一个OnTriggerStay(),以便当我进入“ Lore”触发器时,它将调用另一个函数。像这样:

private void OnTriggerStay(Collider other) 
{
if (other.tag == "Lore")
        {
            Debug.LogError("Inside Letter Box");
            FindObjectOfType<Lore>().ClickEToPickUpLetter();
        }
}

因此,我进入“ Lore”触发器的时间就是调用FindObjectOfType()。ClickEToPickUpLetter();。结束了。

它正在调用的函数看起来像这样。

 public GameObject loreMessage;


public void ClickEToPickUpLetter()
    {
        if (Input.GetKeyDown("e"))
        {
               loreMessage.SetActive(true);
        }
    }

在这种情况下。当我处于触发器中时,如果用户单击“ e”,我的GameObject loreMessage将被设置为活动状态。 在检查员中,我引用了我制作的CANVAS作为loreMessage。这样,每次用户单击“ e”时,我的“消息画布”都将设置为活动状态。 这是我的问题。当我走进触发器“ Lore”时,我有一个Debug.Log,上面写着“ Inside Letter Box”,所以我知道触发器正在工作。我还将Debug.Log放入了ClickEToPickUpLetter()函数。所以我知道当用户单击“ e”时也会调用该函数。我的问题是,每次打开的GameObject(在我的情况下为loreMessage,就像在Canvas中一样)都是同一画布。

我将此prefb放置在地图的多个部分上。每个对象都有一个具有相同对撞器的知识脚本。唯一的区别是,在每个对象上我都引用了一个不同的画布,因此,当用户单击“ e”时,将打开一个新的画布,以放置一个新图像。 为什么每次调用脚本时都引用同一画布,即使每个单独的脚本都引用了不同的canvas / GameObject。这是因为它是预制件吗?我要做的只是简单地触发。在这种情况下,“ Lore”可以按其上方的“ e”。当用户按下按钮时,新的画布将被打开。每次他们进入新的对撞机时。但这似乎并没有打开我在检查器中引用的游戏对象。相反,它将打开我最初每次创建的第一个画布。谢谢所有答案。

解决方法

我知道了!!!我的问题是我在预制板上的脚本无法正常工作,因为我什么时候可以调用脚本。

FindObjectOfType<Lore>().ClickEToPickUpLetter();

它只是调用此脚本找到的第一个实例。

相反,我需要访问单个对象的脚本。在这种情况下,我这样做了,

if (other.tag == "Lore")
    {
        Debug.LogError("Inside Letter Box");
        //FindObjectOfType<Lore>().ClickEToPickUpLetter();
other.gameObject.GetComponent<Lore>().ClickEToPickUpLetter();
     }

}

这样,可以使用FindObjectOfType查找第一个Lore脚本,而不用查找它。通过将脚本作为组件,例如gameObject.GetComponent();

,可以找到与之碰撞的东西的Lore脚本。

我了解到,只要我首先调用该对象,就可以在任何情况下执行此操作。仅在检查器内部引用它是不够的。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...