Пример #1
0
    // Use this for initialization
    void Start()
    {
        //자기 자신정보를 등록.
        EnemyTr = GetComponent <Transform>();

        ModelNameCheck();
        Debug.Log(enemyLevel + "                몬스터레벨.");

        //플레이어 정보를 가져온다.
        PlayerTr = GameObject.FindWithTag("Player").GetComponent <Transform>();

        //록온 시스템 활성화를 위한 게임오브젝트 값
        lockOnEnemyGo = gameObject.GetComponentInChildren <LockOnSystems>();
        lockOnEnemyGo.LockOnSystemUs = EnemyTr;

        //객체에 등록된 캡슐컬라이더 리스트를 가져온다.
        CapsuleCollider[] arrayCapsuleCollider = gameObject.GetComponentsInChildren <CapsuleCollider>();
        //캡슐컬라이더 리스트에서 0번컬라이더 호출
        forwardCapsuleCollider = arrayCapsuleCollider[0];
        //캡슐컬라이더 리스트에서 1번컬라이더 호출
        bodyCapsuleCollider = arrayCapsuleCollider[1];
        //박스컬라이더 등록
        wingBoxCollider = GetComponent <BoxCollider>();
        //모델별 컬라이더사이즈 메소드 호출
        EmenyLevelSet();
        //적군 유한상태기계 코루틴 호출
        StartCoroutine(this.CheckEnemyState());
    }
Пример #2
0
    // Use this for initialization
    void Start()
    {
        //록온시스템 게임오브젝트를 태그로 찾아서 lockOnBool에 등록
        lockOnBool = GameObject.FindGameObjectWithTag("LockOn");
        //lockOnBool이 가진 정보 중 록온시스템 스크립트 정보를 가져옴.
        lockScript = lockOnBool.GetComponent <LockOnSystems>();

        StartCoroutine("LockOnTexturChange");
    }
Пример #3
0
    // }


    // Use this for initialization
    void Start()
    {
        tr = GetComponent <Transform>();

        lockOnPlayerGo = gameObject.GetComponentInChildren <LockOnSystems>();
        lockOnPlayerGo.LockOnSystemUs = tr;

        Physics.IgnoreLayerCollision(LayerMask.NameToLayer("Player"),
                                     LayerMask.NameToLayer("Missile"), true);
        Physics.IgnoreLayerCollision(LayerMask.NameToLayer("Player"),
                                     LayerMask.NameToLayer("Gun"), true);
    }
Пример #4
0
    //적군 모션 설정
    IEnumerator CheckEnemyState()
    {
        while (!isDie)
        {
            yield return(new WaitForSeconds(0.0f));

            //플레이어와의 거리값을 가져온다.
            float dist = Vector3.Distance(PlayerTr.position, EnemyTr.position);
            //플레이어와의 거리가 공격범위 안으로 들어올 경우.

            Debug.Log(Hp + " 적군체력 확인용.!");
            //몬스터 체력이 0 이하일경우
            if (Hp <= 0)
            {
                Debug.Log("몬스터 죽음 확인용.(이 로그가 나타나면 몬스터 죽음.)");
                //몬스터 상태 죽음으로 변경
                isDie = true;
                //몬스터 스폰에 몬스터 죽음상태 보내고 몬스터가 리스폰된 위치의 값 전달.
                GameObject.Find("GameManager").GetComponent <EnemySpawn>().enemyDieCheck    = isDie;
                GameObject.Find("GameManager").GetComponent <EnemySpawn>().enemyDiePointNum = pointZoneNum;
                //몬스터 삭제
                Destroy(this.gameObject);
                //삭제하면서 폭발이펙트
                StartCoroutine(this.BoomEffect(this.transform.position));
            }

            if (dist <= attackDist)
            {
                //enemyState = EnemyState.attack;
                //록온시스템 게임오브젝트를 태그로 찾아서 LockOnTargetGet에 등록
                //LockOnTargetGet = GameObject.FindGameObjectWithTag("LockOn");
                //LockOnTargetGet이 가진 정보 중 록온시스템 스크립트 정보를 가져옴.
                targetTr = GetComponentInChildren <LockOnSystems>();
                //록온시스템 스크립트에서 타겟변수값을 미사일 추적트랜스폼에 전달.
                LockOnTarget = targetTr.lockOnTarget;

                EnemyTr.forward = Vector3.RotateTowards(EnemyTr.forward, PlayerTr.position - EnemyTr.position, enemyTurnSpeed
                                                        * Time.deltaTime, enemyTurnSpeed * Time.deltaTime);

                if (MissileCount != true)
                {
                    if (MissileFullCount < firePosCount)
                    {
                        //미사일 적재량이 발사하려는 미사일 개수보다 적을경우
                        StartCoroutine("McountTime");
                    }
                    else
                    {
                        StartCoroutine("countTime");
                        //미사일 발사
                        EnemyFire();
                    }
                }

                Debug.Log("attack");
            }
            //플레이어와의 거리가 추적범위 안으로 들어올 경우.
            else if (dist <= traceDist)
            {
                //enemyState = EnemyState.trace;
                //모델의 전면부가 유저를 추적하며 회전
                EnemyTr.forward = Vector3.RotateTowards(EnemyTr.forward, PlayerTr.position - EnemyTr.position,
                                                        enemyTurnSpeed * Time.deltaTime, 0.0f);

                //모델을 플레이어 방향으로 전진한다.
                EnemyTr.Translate(EnemyTr.forward * enemyTransSpeed * Time.deltaTime, Space.World);
                Debug.Log("lockon");
            }
            //플레이어와의 거리가 추적범위 밖일 경우.
            else
            {
                //enemyState = EnemyState.idle;

                Debug.Log("nomal");
            }
        }
    }