我写了一个改变NPC状态的脚本。我运行一个返回true或false的函数。如果是真的,NPC会改变状态。
一切都很好,除了我看到不止一个NPC同时表现出来,看起来很可怕。感觉他们是一个军事中队,完全同步。
我使用随机值来检查函数是否应该返回true或false ...但我希望每个NPC看到不同的结果,因为随机值已到位
class void NPCState()
{
private System.Random rnd = new System.Random();
private string state;
Void Start()
{
state = "state1";
StartCoroutine("RunAction");
}
IEnumerator RunAction()
{
...do stuff every N cycles
switch (state)
{
case "state1":
... go to state 1
break;
case "state2":
... go to state 2
break;
}
}
void State1()
{
... execute certain tasks
if (ChangeActionType)
{
...change to a different action type
state = state2;
}
}
void State2()
{
... execute certain tasks
... then go back to previous task
state = state1;
}
private bool ChangeActionType()
{
if (rnd.next(100) > 50)
return true;
else
return false;
}
}
我确实简化了代码,以显示状态发生变化的部分;这基本上发生在多个NPC的同一时间。
如何在脚本中创建足够的变化,以便每个NPC可以随机更新?我只是想避免他们都像同步游泳运动员一样:)