コード例 #1
0
ファイル: playermode.cs プロジェクト: hbs1215/VacationProject
 void Awake()
 {
     healthPoint         = playerhealth;
     target              = GameObject.FindGameObjectWithTag("Enemy").transform;
     character           = GameObject.FindGameObjectWithTag("character").transform;
     enemyState          = ENEMYSTATE.IDLE;
     characterController = GetComponent <CharacterController>();
     if (animationeffect)
     {
         anima = GetComponent <Animation>();
     }
     else
     {
         anim = GetComponent <Animator>();
     }
     enemystate = target.GetComponent <enemymode>();
 }
コード例 #2
0
ファイル: playermode.cs プロジェクト: hbs1215/VacationProject
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.Z))
        {
            enemyState = ENEMYSTATE.MOVE;
        }
        else if (Input.GetKey(KeyCode.X))
        {
            enemyState = ENEMYSTATE.ESCAPE;
        }

        Vector3 dir = target.position - transform.position;

        if (GameObject.FindGameObjectWithTag("Enemy") != null)
        {
            target = GameObject.FindGameObjectWithTag("Enemy").transform;
        }
        else
        {
            enemyState = ENEMYSTATE.KILL;
        }
        if (target != null)
        {
            enemystate = target.GetComponent <enemymode>();
        }
        if (!animationeffect)
        {
            anim.SetBool("walking", walk);
        }
        if (healthPoint <= 0 && enemyState != ENEMYSTATE.DEAD)
        {
            enemyState = ENEMYSTATE.DEAD;
        }
        switch (enemyState)
        {
        case ENEMYSTATE.IDLE:
        {
            stateTime += Time.deltaTime;
            walk       = false;
            if (animationeffect)
            {
                anima.CrossFade("aelf_pet_idle");
            }
            if (stateTime > idleStateMaxTime)
            {
                stateTime  = 0.0f;
                enemyState = ENEMYSTATE.MOVE;
            }
        }
        break;

        case ENEMYSTATE.MOVE:
        {
            walk = true;
            if (animationeffect)
            {
                anima.CrossFade("aelf_move");
            }
            float distance = (target.position - transform.position).magnitude;

            if (distance < attackRange)
            {
                enemyState = ENEMYSTATE.ATTACK;
                stateTime  = attackStateMaxTime;
            }
            else
            {
                dir = target.position - transform.position;

                //Debug.Log(transform.position);
                // Debug.Log(dir);

                dir.y = 0.0f;
                dir.Normalize();
                characterController.SimpleMove(dir * moveSpeed);

                transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(dir), rotationSpeed * Time.deltaTime);
            }
        }
        break;

        case ENEMYSTATE.ATTACK:
        {
            stateTime += Time.deltaTime;
            dir        = target.position - transform.position;
            dir.y      = 0.0f;
            dir.Normalize();
            transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(dir), rotationSpeed * Time.deltaTime);

            if (stateTime > attackStateMaxTime)
            {
                if (animationtime == 0)
                {
                    if (animationeffect)
                    {
                        anima.CrossFade("aelf_hit");
                    }
                    else
                    {
                        anim.SetTrigger("Isattack_tiger");
                    }
                }

                animationtime += Time.deltaTime;
                if (animationtime > animationplay)
                {
                    if (animationeffect)
                    {
                        anima.CrossFade("aelf_pet_idle");
                    }
                    enemystate.DamageByEnemy(playerpower);
                    animationtime = 0f;
                    stateTime     = 0.0f;
                }

                walk = false;
            }

            float distance = (target.position - transform.position).magnitude;
            if (distance > attackRange || target == null)
            {
                enemyState = ENEMYSTATE.IDLE;
            }
        }
        break;

        case ENEMYSTATE.KILL:
        {
            if (animationeffect == false)
            {
                walk = false;
            }
            else
            {
                anima.CrossFade("aelf_pet_idle");
            }
        }

        break;

        case ENEMYSTATE.DEAD:
        {
            if (deadtime == 0)
            {
                if (!animationeffect)
                {
                    anim.SetTrigger("Die");
                }
            }
            deadtime += Time.deltaTime;
            //Destroy(gameObject);
            if (animationeffect)
            {
                transform.Rotate(0f, 0f, -1f);
                transform.Translate(-Vector3.up * 8 * Time.deltaTime);
            }
            if (deadtime > 0.6f)
            {
                Destroy(gameObject);
            }
            enemyState = ENEMYSTATE.NONE;
        }
        break;

        case ENEMYSTATE.ESCAPE:
        {
            walk = true;
            if (animationeffect)
            {
                anima.CrossFade("aelf_move");
            }
            escape    = character.position;
            escape.z -= 2;

            dir = escape - transform.position;
            if (dir.magnitude > 2f)
            {
                dir.y = 0.0f;
                dir.Normalize();
                characterController.SimpleMove(dir * moveSpeed);

                transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(dir), rotationSpeed * Time.deltaTime);
            }
        }
        break;
        }
    }