- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
基本上,我使用的是 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;
}
}
如何使用:
...和控制DialogueActive
每一步的状态
关于c# - 当一个变量被一个脚本而不是另一个脚本激活时 If 语句起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57599890/
我是一名优秀的程序员,十分优秀!