使用不同的副本访问Unity中的GameObject

时间:2015-08-23 09:24:07

标签: c# unity3d monodevelop gameobject

我在我的RPG(角色扮演游戏)中创建了一个Quest系统,它可以通过一个NPC(非玩家角色)。我在我的主角上贴了一个脚本,可以检查你是否从NPC那里得到了一个任务。这是代码:

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

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

现在我已经在我的NPC上附上一个脚本,让他们向玩家发出任务。这是NPC的代码:

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

当玩家点击NPC时,会出现一个窗口,向玩家显示他/她的任务目标。目前,我已经创建了2个NPC并将它们附加到QuestGiver脚本中。这是一些截图:

enter image description here enter image description here

在接受按钮上,我使用了连接到播放器的QuestTracker上的acceptQuest()函数,但我无法为QuestGiver设置特定值,因为我有多个NPC副本没有只有一个。

enter image description here

我想要的是通过运行时在播放器上设置QuestGiver。我知道它可以通过使用OnMouseOver()函数或Raycast来实现。我知道逻辑,但我不知道如何实现它。

2 个答案:

答案 0 :(得分: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 :(得分:0)

您应该在游戏中创建所有QuestGivers的数组,并在任何脚本的Start()函数上分配它们的值。将一个全局变量添加到QuestGiver类以标识哪个QuestGiver是谁,例如整数就可以了。将此代码放入acceptQuest()

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

giver.questAccepted = true;

问候,TuukkaX。