if 语句在变量被一个脚本激活而不是另一个脚本激活时起作用



本质上,我使用的是Unity C#(我很新,所以我可能错过了一些明显的东西(,我有一个脚本,它使用Raycast与NPC"交谈"。

从本质上讲,它的作用是 Raycast 拾取它与之碰撞的内容,然后在该对象中打开"NPC"脚本。我这样做是为了区分 NPC,因为将来我可以使用序列化更改不同 NPC 的代码。

好的,根据我的调试,这也很好用,我的问题似乎正在发生得更远。

然后,此NPC脚本激活另一个名为"DialogueActive"的"NPCMaster"脚本上的变量。根据我的调试,这也可以工作,问题是,尽管我的两个 NPC 几乎完全相同,并且都正确激活了这个变量,其中一个不会激活 if 语句检查"对话活动"== 真。

奇怪的是,当我把他们的名字改成两个相同的名字,或者完全改变他们的名字,或者删除并复制预制件时,损坏的NPC就会改变。然而,一旦我放置它们,一个 NPC 就坏了,另一个就坏了,这并不取决于我先和谁说话或什么。我可以随心所欲地与未损坏的 NPC 交谈多次,它会一直有效。

我尝试了很多事情,我尝试更改激活变量的方式(尽管它不是问题开始的地方(我尝试删除它们,复制它们,使它们具有相同的名称,但是然后损坏的 NPC 只会切换位置。

就像我说的,我是C#统一的新手,而且基本上是编码,所以这个问题可能是由于我的无知造成的。

发生问题的 if 语句。

void Update()
{
if (DialogueActive == true)
{
Debug.Log("Test2");
panelexist.enabled = true;
maintext.text = dialogue;
}
else
{
panelexist.enabled = false;
maintext.text = ""; 
}
}

激活"对话活动"变量的变量。

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( 语句激活它下面的代码,它在一种情况下是这样做的,但在另一种情况下却没有。

似乎您的脚本在做一些冲突的事情。

这部分:

if (Interacting == true)
{
Debug.Log("Test1");
obj.GetComponent<NPCMasterScr> ().DialogueActive = true;
}
else 
{
obj.GetComponent<NPCMasterScr> ().DialogueActive = false;
}

这将在层次结构中较高的脚本上正常工作。 当第二个脚本尝试做某事时 if = true 时,第一个脚本通过其else阻止它。因此,当第二个脚本尝试obj.GetComponent<NPCMasterScr> ().DialogueActive = true;时,第一个脚本确实obj.GetComponent<NPCMasterScr> ().DialogueActive = false;

更新 1:以下代码可能有助于理解问题。

void Update()
{
if (Interacting == true)
{
Debug.Log("Test1");
obj.GetComponent<NPCMasterScr> ().DialogueActive = true;
}
if (Input.GetKeyDown("escape"))
{
Interacting = false;
obj.GetComponent<NPCMasterScr> ().DialogueActive = false;
}
}

使用方法:

  • 与冷杉对象交互
  • 停止交互
  • 按 Esc 键(在此步骤之前应停止交互!
  • 与第二个对象交互

。并控制每个步骤DialogueActive状态

最新更新