我正在为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个不同的值访问此静态对象?对不起,我只是想清理一下。
答案 0 :(得分:0)
有多个游戏对象运行Debug.Log()
命令。
此外,mobName
是暴徒本身的名称,这就是为每个执行Debug.Log()
的GameObject输出不同值的原因。