2015-08-28 28 views
0

我目前正在Unity3D中为我的游戏创建一个任务系统。它有一个工作任务系统,到目前为止,现在,它看起来像这样:获取具有不同值的静态游戏对象的价值

enter image description here

,杀特定魔鬼针对的任务后,追求的价值递增:

enter image description here

但是如果我采取其他任务,例如像这样:

enter image description here

enter image description here

即使满足条件,您也可以看到值不像第一个那样增加了值。我在这里做的是在我的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),它输出“龙”或“杀手蜂”。但是当我的Debug.Log(mobName),它应该是NPC要求定位的那个时,它输出2个名字,你可以在图像的控制台上看到它。有可能我可以通过2个不同的值访问这个静态对象吗?很抱歉,很长的文章,我只想清理一下。

回答

0

有一个以上的GameObject运行Debug.Log()命令。 此外,mobName是暴徒本身的名称,这就是为什么它会为正在执行Debug.Log()的每个GameObject输出不同的值。