コード例 #1
0
    private IEnumerator handleIdleState()
    {
        float timePassed      = 0f;
        int   rightOrLeftRoll = Random.Range(0, 2);

        while (timePassed < idleTime)
        {
            timePassed += Time.deltaTime;
            mover.turn(rightOrLeftRoll == 0, Time.deltaTime);

            //determine next state
            if (getDistanceToPlayer() < aggroDistance)
            {
                currentState = spiderState.following;
            }
            else
            {
                currentState = spiderState.wandering;
            }



            yield return(null);
        }
    }
コード例 #2
0
    private IEnumerator moveTowardPlayerKeepingDistance()
    {
        float timePassed = 0f;

        while (timePassed < walkTime && getDistanceToPlayer() > followDistance)
        {
            timePassed += Time.deltaTime;
            mover.moveForward(Time.deltaTime);
            yield return(null);
        }

        if (getDistanceToPlayer() < followDistance)
        {
            currentState = spiderState.chasing;
        }
        yield return(null);
    }
コード例 #3
0
    private IEnumerator handleWanderingState()
    {
        float timePassed = 0f;

        while (timePassed < walkTime)
        {
            timePassed += Time.deltaTime;
            mover.moveForward(Time.deltaTime);

            //determine next state
            if (getDistanceToPlayer() < aggroDistance)
            {
                currentState = spiderState.following;
            }
            else
            {
                currentState = spiderState.idle;
            }

            yield return(null);
        }
    }
コード例 #4
0
    private IEnumerator handleChasingState()
    {
        yield return(lookInDirectionOfPlayer());

        float oldMoveSpeed = mover.moveSpeed;
        float oldWalkTime  = walkTime;

        walkTime        = walkTime / 2f;
        mover.moveSpeed = mover.moveSpeed * 2f;
        float timePassed = 0;

        while (timePassed < walkTime)
        {
            timePassed += Time.deltaTime;
            mover.moveForward(Time.deltaTime);
            yield return(null);
        }
        currentState    = spiderState.idle;
        mover.moveSpeed = oldMoveSpeed;
        walkTime        = oldWalkTime;
        yield return(null);
    }
コード例 #5
0
 private void Start()
 {
     currentState = spiderState.idle;
     StartCoroutine(spiderStateMachine());
 }