【发布时间】:2015-08-30 03:51:02
【问题描述】:
我目前正在 Unity3D 中为我的游戏创建一个任务系统。到目前为止,它有一个有效的任务系统,它看起来像这样:
并且在为该任务杀死特定怪物后,该任务的价值增加:
但是,如果我以其他任务为例:
您可以看到这些值并没有像我在第一个中所做的那样增加,即使条件得到满足。我在这里所做的是,在我的 NPC(非玩家角色)上附加了一个名为 QuestGiver 的脚本,在我的播放器上,我附加了一个名为 QuestTracker 的脚本。在我的 QuestTracker 上,我已将其连接到我的 QuestGiver,以便在任何地方访问它,因为我有很多 NPC。
public static QuestGiver questGiver;
现在,在我的 QuestGiver 上,这是我的代码:
public string mobName;
void Update ()
{
if (fighter.opponent != null && killQuest)
{
if (mobToBeKilled.mobName == mobName && questAccepted)
{
if (mobToBeKilled.isDead() && !mobToBeKilled.isAlive && !questFinish)
{
currentKillCount++;
mobToBeKilled.isAlive = true;
if (currentKillCount == maxKillCount)
{
questFinish = true;
log.logText.text = log.InitialValue + questTitle + " quest completed!\n";
log.NewValue = log.logText.text;
}
}
}
}
}
正如你在我的检查器上看到的,我已经在名为 mobName 的字符串上设置了要杀死的怪物的名称,并且我的 QuestTracker 上的静态变量可以通过我的 QuestGiver 上的方法访问:
void OnMouseDown()
{
QuestTracker.questGiver = this;
}
为了让我访问 mobToBeKilled,我在我的敌人脚本上附加了一个 OnMouseEnter() 函数,它是这样的:
private void OnMouseEnter()
{
player.GetComponent<Fighter>().opponent = gameObject;
QuestGiver.mobToBeKilled = this;
}
我可以说这工作正常,例如 Debug.Log(mobToBeKilled.mobName),它输出“Dragon”或“Killer Bee”。但是当我 Debug.Log(mobName) 应该是 NPC 将请求定位的那个时,它会输出 2 个名称,您可以在图像上的控制台中看到这些名称。我可以使用 2 个不同的值访问这个静态对象吗?抱歉发了这么长的帖子,我只是想澄清一下。
【问题讨论】:
标签: c# unity3d static-members