【发布时间】:2019-08-21 22:26:54
【问题描述】:
基本上,我使用的是 Unity C#(我是新手,所以我可能会遗漏一些明显的东西),并且我有一个脚本,它使用 Raycast 与 NPC“对话”。
它的主要作用是,Raycast 拾取它所碰撞的东西,然后打开该对象内的“NPC”脚本。我这样做是为了区分 NPC,因为将来我可以使用序列化更改不同 NPC 的代码。
好的,根据我的调试,这也可以正常工作,我的问题似乎正在进一步发生。
这个 NPC 脚本然后激活另一个我的“NPCMaster”脚本上的一个变量,称为“DialogueActive”。根据我的调试,这也有效,问题是,尽管我的两个 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) 语句激活它下面的代码,它在一种情况下会这样做,但在另一种情况下不会。
【问题讨论】:
-
愿意向我们展示您对 DialogueActive 的声明吗?一个 MCVE 会很好
-
不知道什么是“MCVE”,但这是在我的 NPCMaster 脚本中声明 DialogueActive 的地方。
public bool DialogueActive = false; -
这一行:
obj.GetComponent<NPCMasterScr> ().DialogueActive = false;包含什么脚本? “NPC”? -
@Nitro557 这是由“NPC”脚本完成的,它正在更改 DialogueActive 变量,该变量在“NPCMaster”脚本中说明,该脚本包含 if 语句,使用 DialogueActive多变的。我已经在我的原始帖子中放置了这个 if 语句。如果你愿意,我可以发布整个脚本,但它大多不相关。
-
@LiamMcCoy,好的。那么,您目前在现场有 2 个带有 NPCMasterScr 的对象?
标签: c# visual-studio unity3d