예제 #1
0
 private void Start()
 {
     monster = GameObject.FindGameObjectWithTag("Enemy");
     player  = GameObject.FindGameObjectWithTag("Player").GetComponent <PlayerIG>();
     //eventTrigger = GameObject.Find("EventTrigger");
     //apperaGoblin = eventTrigger.transform.GetChild(0).GetComponent<AppearY_Goblin>().mP_YellowGoblins;
     //apperaGoblin1 = eventTrigger.transform.GetChild(1).GetComponent<AppearY_Goblin>().mP_YellowGoblins;
 }
예제 #2
0
    public override IEnumerator Coroutine()
    {
        while (!mMonsterAI.mIsDeath)
        {
            if (hasTarget)
            {
                mPathFider.isStopped = false;
                mMonsterAnimator.SetBool("isRun", true);

                float distance = Vector3.Magnitude(mTransform.position - mTarget.transform.position);
                float angle    = Mathf.Abs(mTransform.eulerAngles.y - mTarget.transform.eulerAngles.y);

                if (distance != 0f && distance <= mMonsterAI.mSkillDistance && distance > 2f && angle < 90f)
                {
                    mPathFider.isStopped = true;
                    mMonsterAnimator.SetBool("isRun", false);
                    mMonsterAI.ChangeState(mMonsterAI.mStates[(int)States.Skill1]);
                }

                else if (distance <= 2f && angle < 140f)
                {
                    mPathFider.isStopped = true;
                    mMonsterAnimator.SetBool("isRun", false);
                    mMonsterAI.ChangeState(mMonsterAI.mStates[(int)States.NomalAttack]);
                }

                else
                {
                    mPathFider.SetDestination(mTarget.transform.position);
                }
            }
            else
            {
                mPathFider.isStopped = true;
                mMonsterAnimator.SetBool("isRun", false);

                Collider[] colliders = Physics.OverlapSphere(mTransform.position, 35f, mTargetLayer);

                for (int i = 0; i < colliders.Length; ++i)
                {
                    PlayerIG player = colliders[i].GetComponent <PlayerIG>();

                    if (player != null && !player.mIsDeath)
                    {
                        mTarget = player;
                        break;
                    }
                }
            }

            yield return(new WaitForSeconds(0.5f));
        }

        yield break;
    }
예제 #3
0
    public void Attack()
    {
        if (!mMonsterAI.mIsDeath)
        {
            Collider[] colliders = Physics.OverlapBox(mTransform.position, new Vector3(1f, 1f, 1.3f), Quaternion.identity, 1 << 9);

            for (int i = 0; i < colliders.Length; ++i)
            {
                PlayerIG player = colliders[i].GetComponent <PlayerIG>();

                if (player != null && !player.mIsDeath)
                {
                    player.mHp--;
                    InGameEventToUI.Instance.OnEventReturnHp(player.mHp);
                    break;
                }
            }
        }
    }
예제 #4
0
    IEnumerator GoToPlayer()
    {
        Collider[] colliders = Physics.OverlapSphere(transform.position, 50f);

        for (int i = 0; i < colliders.Length; ++i)
        {
            PlayerIG player = colliders[i].GetComponent <PlayerIG>();

            do
            {
                yield return(new WaitForSeconds(1f));
            } while (!player.CheckAllMonsterDie());

            if (player != null && !player.mIsDeath)
            {
                mTargetPosition = player.transform;
                yield break;
            }
        }
    }