Ejemplo n.º 1
0
    private void Attack()
    {
        moveStep = aiAttackSpeed * Time.deltaTime;

        transform.position = Vector3.MoveTowards(transform.position, attackPosition, moveStep);

        if (Vector3.Distance(transform.position, attackPosition) < 1f)
        {
            //revert to defense state
            aiStates3D = AIStates3D.defense;
        }
    }
Ejemplo n.º 2
0
    // Update is called once per frame
    void Update()
    {
        aiPrevPosition = transform.position;
        aiPrevRotation = transform.rotation.eulerAngles;

        boundsCheck();

        //Evasion change logic
        if (Time.time - timeElapsed_Evade > nextEvadeStartDuration)
        {
            aiEvadeDir = aiEvadeDirections[Random.Range(0, aiEvadeDirections.Length - 1)];

            if (aiEvadeDir == aiEvadeDirections[0])//left
            {
                evadeToPosition = new Vector3(transform.position.x - 0.5f, 0, transform.position.z);
            }
            else
            if (aiEvadeDir == aiEvadeDirections[1])//right
            {
                evadeToPosition = new Vector3(transform.position.x + 0.5f, 0, transform.position.z);
            }
            else
            if (aiEvadeDir == aiEvadeDirections[2])//front
            {
                evadeToPosition = new Vector3(transform.position.x, 0, transform.position.z - 0.5f);
            }

            timeElapsed_Evade = Time.time;
        }

        performEvasion(evadeToPosition);

        //State change logic
        if (Time.time - timeElapsed_StateChange > nextStateChangeDuration)
        {
            if (aiStates3D == AIStates3D.defense)
            {
                aiStates3D = AIStates3D.attack;
            }
            else
            {
                aiStates3D = AIStates3D.defense;
            }

            attackPosition = playerRef.transform.position;//get the recent player pos

            timeElapsed_StateChange = Time.time;
        }

        //If the player is nearer to AI
        if (Vector3.Distance(playerRef.transform.position, this.transform.position) < aiSafeDistance)
        {
            switch (aiStates3D)
            {
            case AIStates3D.attack:
                Attack();
                break;

            case AIStates3D.defense:
                Defense();
                break;
            }
        }


        if (Vector3.Distance(aiPrevPosition, transform.position) != 0)
        {
            //animator.play
            animator.SetBool("isMoving", true);
        }
        else
        {
            animator.SetBool("isMoving", false);
        }

        transform.LookAt(playerRef.transform);
    }