亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當一個變量被一個腳本激活而不是另一個腳本激活時,if 語句起作用

當一個變量被一個腳本激活而不是另一個腳本激活時,if 語句起作用

C#
叮當貓咪 2023-09-16 16:20:16
本質上,我使用的是 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) 語句激活其下面的代碼,它在一種情況下做到了,但在另一種情況下則不然。
查看完整描述

1 回答

?
SMILET

TA貢獻1796條經驗 獲得超4個贊

看起來你的腳本做了一些相互沖突的事情。


這部分:


 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(執行此步驟之前應停止交互?。?/p>

  • 與第二個對象交互

...以及DialogueActive每個步驟的控制狀態


查看完整回答
反對 回復 2023-09-16
  • 1 回答
  • 0 關注
  • 108 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號