【发布时间】:2020-10-02 15:03:59
【问题描述】:
在我的游戏中,我有一个简单的立方体预制件。在这个立方体上,我有一个名为“Lore”的脚本。还有一个盒子对撞机,它是立方体大小的 3 倍,我将其制成触发器并给出标签“Lore”。 就这些。 在我的立方体预制件下面(小时候),我创建了一个名为“消息”的画布。 所以每个立方体预制件都有一个对撞机,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”,所以我知道我的触发器正在工作。我还在 ClickEToPickUpLetter() 函数中添加了一个 Debug.Log。所以我知道当用户单击“e”时也会调用该函数。我的问题是正在打开的 GameObject(在我的情况下是 loreMessage,就像在我的 Canvas 中一样)每次都是同一个画布。
我将此预设放置在地图的多个部分上。每个对象都有一个具有相同对撞机的传说脚本。唯一的区别是在每个对象上我都引用了不同的画布,因此当用户单击“e”时,会打开一个新画布,显示一个新图像。 为什么每次调用脚本时都会引用同一个画布,即使每个单独的脚本都引用了不同的画布/游戏对象。这是因为它是预制件吗?我想要完成的只是走到一个触发器。在这种情况下,“Lore”能够在其上按“e”。当用户按下按钮时,一个新的画布正在打开。每次他们进入一个新的对撞机。但它似乎没有打开我在检查器中引用的游戏对象。相反,它每次都会打开我最初创建的第一个画布。非常感谢任何答案。
【问题讨论】: