// 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()); }
// Use this for initialization void Start() { //록온시스템 게임오브젝트를 태그로 찾아서 lockOnBool에 등록 lockOnBool = GameObject.FindGameObjectWithTag("LockOn"); //lockOnBool이 가진 정보 중 록온시스템 스크립트 정보를 가져옴. lockScript = lockOnBool.GetComponent <LockOnSystems>(); StartCoroutine("LockOnTexturChange"); }
// } // 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); }
//적군 모션 설정 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"); } } }