2015-08-23 38 views
2

我在RPG(角色扮演遊戲)中創建了一個Quest系統,它可以通過NPC(非玩家角色)獲取。我在主角上添加了一個腳本,可以檢查你是否從NPC獲得任務。下面的代碼:在Unity中使用不同副本訪問遊戲對象

public class QuestTracker : MonoBehaviour 
{ 
    public QuestGiver questGiver; 
    public Button AcceptQuest; 
    public OpenQuestWindow questWindow; 

    public void acceptQuest() 
    { 
     questGiver.questAccepted = true; 
    } 
} 

現在我附上我的NPC腳本,針對他們給一個任務給玩家。下面是全國人大代碼:

public class QuestGiver : MonoBehaviour 
{ 
    public bool questAccepted = false; 
} 

當玩家點擊人大,會出現一個窗口,它會顯示玩家究竟會是他/她的追求目標。現在,我已經創建了2個NPC並附上了QuestGiver腳本。下面是一些截圖:

enter image description here enter image description here

在接受按鈕,我用它連接到播放器的acceptQuest()在我的QuestTracker功能,但我不能爲QuestGiver特定值因爲我有不止一個NPC的多個副本。

enter image description here

我要的是設定QuestGiver上通過運行時播放器。我知道它可以通過使用OnMouseOver()函數或Raycast來實現。我知道邏輯,但我不知道如何實現它。

回答

2

我認爲使用靜態變量可以解決您的問題。將玩家questGiver設置爲靜態。

public class QuestTracker : MonoBehaviour 
{ 
    public static QuestGiver questGiver; 
    public Button AcceptQuest; 
    public OpenQuestWindow questWindow; 

    public void acceptQuest() 
    { 
     questGiver.questAccepted = true; 
    } 
} 

然後當Npc做出任務時,通過Npc腳本改變玩家questGiver。

void OnMouseDown() 
{ 
    QuestTracker.questGiver = this; 
} 

編輯:順便說一下,當您將其更改爲靜態時,您不會在檢查器中看到questGiver變量。使用Debug.Log()進行測試。

+1

真的很不錯的解決方案O.o我愛你如何使用OnMouseDown()的優勢。 +1 – TuukkaX

+0

我已經有了不同的NPC對話,它變成了我想要的。 –

+0

您可以在inspector中看到questGiver,當然有另一個名爲questGiverInspector的公共變量,然後在void中寫入更新questGiverInspector = questGiver; –

0

你應該製作一個遊戲中所有QuestGivers的數組,並在任何腳本的Start()函數上賦值。將全局變量添加到QuestGiver類中以確定哪​​個QuestGiver是誰,例如,整數很好。將此代碼放入acceptQuest()

QuestGiver giver = null; 
switch (questGiver.ID) 
{ 
    case 0: 
    giver = classThatHasTheArray.QuestGiverArray[0]; 
    break; 
} 

giver.questAccepted = true; 

問候,TuukkaX。