随机化游戏对象动作,这样它们就不会同时发生

时间:2016-04-25 04:04:37

标签: unity3d fsm

我写了一个改变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可以随机更新?我只是想避免他们都像同步游泳运动员一样:)

0 个答案:

没有答案