gpt4 book ai didi

c# - 当一个变量被一个脚本而不是另一个脚本激活时 If 语句起作用

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:57 25 4
gpt4 key购买 nike

基本上,我使用的是 Unity C#,(我是新手,所以我可能遗漏了一些明显的东西),并且我有一个脚本,它使用 Raycast 与 NPC“交谈”。

基本上它接下来所做的是,Raycast 拾取它碰撞的对象,然后打开该对象内的“NPC”脚本。我这样做是为了区分 NPC,因为将来我可以使用序列化为不同的 NPC 更改代码。

好的,根据我的调试,这同样也能正常工作,我的问题似乎发生在更远的地方。

此 NPC 脚本然后激活另一个名为“DialogueActive”的我的“NPCMaster”脚本上的变量。根据我的调试,这也有效,问题是,尽管我的两个 NPC 几乎完全相同,并且都正确激活了这个变量,但其中一个不会激活 if 语句检查是否“DialogueActive”== true。

奇怪的是,当我更改他们的名字时,将它们改成相同的名字,或者完全更改他们的名字,或者删除并复制预制件,损坏的 NPC 会发生变化。然而,一旦我放置它们,一个 NPC 坏了而另一个没有坏,这不取决于我先和谁交谈或其他任何事情。而且我可以与未损坏的 NPC 多次交谈,并且它始终有效。

我试过很多东西,我试过改变我激活变量的方式(尽管它不是问题开始的地方)我试过删除它们,复制它们,使它们具有相同的名称,但是然后 splinter 的 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) 语句激活它下面的代码,在一种情况下它会激活它,但在另一种情况下不会。

最佳答案

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

这部分:

 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每一步的状态

关于c# - 当一个变量被一个脚本而不是另一个脚本激活时 If 语句起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57599890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com