我在我的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脚本中。这是一些截图:
在接受按钮上,我使用了连接到播放器的QuestTracker上的acceptQuest()函数,但我无法为QuestGiver设置特定值,因为我有多个NPC副本没有只有一个。
我想要的是通过运行时在播放器上设置QuestGiver。我知道它可以通过使用OnMouseOver()函数或Raycast来实现。我知道逻辑,但我不知道如何实现它。
答案 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。