获取具有不同值的静态GameObject的值

时间:2015-08-28 22:56:51

标签: c# unity3d static-members

我正在为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),它输出“Dragon”或“Killer Bee”。但是当我的Debug.Log(mobName),它应该是NPC将请求定位的那个,它输出2个名字,你可以在图像的控制台中看到。是否有可能使用2个不同的值访问此静态对象?对不起,我只是想清理一下。

1 个答案:

答案 0 :(得分:0)

有多个游戏对象运行Debug.Log()命令。 此外,mobName是暴徒本身的名称,这就是为每个执行Debug.Log()的GameObject输出不同值的原因。