本质上,我使用的是 Unity C#(我很新,所以我可能会遗漏一些明显的东西),并且我有一个脚本,它使用 Raycast 与 NPC“对话”。
本质上,它所做的就是 Raycast 拾取与其碰撞的物体,然后打开该对象内的“NPC”脚本。我这样做是为了区分 NPC,因为将来我可以使用序列化更改不同 NPC 的代码。
好吧,根据我的调试,这也可以正常工作,我的问题似乎正在进一步发生。
然后,这个 NPC 脚本会激活另一个名为“DialogueActive”的“NPCMaster”脚本上的变量。根据我的调试,这也有效,问题是,尽管我的两个 NPC 几乎完全相同,并且都正确激活了这个变量,但其中一个不会激活 if 语句检查“DialogueActive”== true 。
奇怪的是,当我将它们的名字更改为相同的名称,或者完全更改它们的名称,或者删除并复制预制件时,损坏的 NPC 就会发生变化。然而,一旦我放置它们,一个 NPC 就会被破坏,而另一个则不会,这并不取决于我首先与谁交谈或其他任何事情。我可以与未损坏的 NPC 交谈任意多次,而且它总是有效的。
我尝试过很多事情,我尝试过更改激活变量的方式(尽管它不是问题开始的地方)我尝试过删除它们,复制它们,使它们具有相同的名称,但随后损坏的 NPC 将只是交换位置。
就像我说的,我对 C# unity 很陌生,而且总体上对编码很陌生,所以问题可能是由于我的无知造成的。
//出现问题的if语句。
void Update()
{
if (DialogueActive == true)
{
Debug.Log("Test2");
panelexist.enabled = true;
maintext.text = dialogue;
}
else
{
panelexist.enabled = false;
maintext.text = "";
}
}
//激活“DialogueActive”变量的变量。
void Update()
{
if (Interacting == true)
{
Debug.Log("Test1");
obj.GetComponent<NPCMasterScr> ().DialogueActive = true;
}
else
{
obj.GetComponent<NPCMasterScr> ().DialogueActive = false;
}
if (Input.GetKeyUp("escape"))
{
Interacting = false;
obj.GetComponent<NPCMasterScr> ().DialogueActive = false;
}
}
我期望 if (DialogueActive == true) 语句激活其下面的代码,它在一种情况下做到了,但在另一种情况下则不然。
SMILET
相关分类