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