使用不同的副本访问 Unity 中的游戏对象
Accessing a GameObject in Unity with Different Copies
我正在我的 RPG(角色扮演游戏)中创建任务系统,它可以通过 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 时,会出现一个 window,向玩家显示 his/her 任务 objective。现在,我已经创建了 2 个 NPC,并将它们都附加到 QuestGiver 脚本中。这是一些屏幕截图:
在接受按钮上,我在附加到播放器的 QuestTracker 上使用了 acceptQuest() 函数,但我无法为 QuestGiver 设置特定值,因为我有多个 NPC 副本,而不仅仅是一个.
我想要的是通过运行时在播放器上设置QuestGiver。我知道它可以通过使用 OnMouseOver() 函数或 Raycast 来实现。我知道逻辑,但我不知道如何实现。
我认为使用静态变量可以解决您的问题。将玩家 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().
测试
您应该为游戏中的所有 QuestGivers 创建一个数组,并在任何脚本的 Start() 函数上分配它们的值。在QuestGiver class 中添加一个全局变量来识别哪个QuestGiver 是谁,例如整数就可以。将此代码放入 acceptQuest()
QuestGiver giver = null;
switch (questGiver.ID)
{
case 0:
giver = classThatHasTheArray.QuestGiverArray[0];
break;
}
giver.questAccepted = true;
此致,TuukkaX。
我正在我的 RPG(角色扮演游戏)中创建任务系统,它可以通过 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 时,会出现一个 window,向玩家显示 his/her 任务 objective。现在,我已经创建了 2 个 NPC,并将它们都附加到 QuestGiver 脚本中。这是一些屏幕截图:
在接受按钮上,我在附加到播放器的 QuestTracker 上使用了 acceptQuest() 函数,但我无法为 QuestGiver 设置特定值,因为我有多个 NPC 副本,而不仅仅是一个.
我想要的是通过运行时在播放器上设置QuestGiver。我知道它可以通过使用 OnMouseOver() 函数或 Raycast 来实现。我知道逻辑,但我不知道如何实现。
我认为使用静态变量可以解决您的问题。将玩家 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().
测试您应该为游戏中的所有 QuestGivers 创建一个数组,并在任何脚本的 Start() 函数上分配它们的值。在QuestGiver class 中添加一个全局变量来识别哪个QuestGiver 是谁,例如整数就可以。将此代码放入 acceptQuest()
QuestGiver giver = null;
switch (questGiver.ID)
{
case 0:
giver = classThatHasTheArray.QuestGiverArray[0];
break;
}
giver.questAccepted = true;
此致,TuukkaX。