public bool GetEnemyData(EnemyType index, out EnemyStruct enemyData) { if (enemyList.TryGetValue((int)index, out enemyData) == false) { Debug.LogWarning("not existed Data: " + index.ToString()); return false; } return true; }
void ResetData(SquadronMemberStruct data) { EnemyStruct enemyStruct = SystemManager.Instance.EnemyTable.GetEnemy(data.EnemyID); CurrentHP = MaxHP = enemyStruct.MaxHP; Damage = enemyStruct.Damage; crashDamage = enemyStruct.CrashDamage; BulletSpeed = enemyStruct.BulletSpeed; FireRemainCount = enemyStruct.FireRemainCount; GamePoint = enemyStruct.GamePoint; AppearPoint = new Vector3(data.AppearPointX, data.AppearPointY, 0); DisappearPoint = new Vector3(data.DisappearPointX, data.DisappearPointY, 0); CurrentState = State.Ready; LastActionUpdateTime = Time.time; isDead = false; //죽은 녀석이 다시 캐시로 들어가는 경우가 있기 때문에 최초 reset마다 초기화 }
// Use this for initialization void Start() { bossList = new List<GameObject>(); managedEnemyList = new List<EnemyStruct>(); //tr = GameObject.FindGameObjectWithTag(Tags.terrain).GetComponent<Terrain>(); playerstate = PlayerState._instance; canAttackEnemy = new List<GameObject>(); buildPos = new Vector3(0, 0, 0); #region 保存したデータから、敵の位置データを貰う List<EnemyPositionData> enemyPositionDataList = GameController._instance.GetEnemyPosition(SceneInfomation._instance.FloorNumber); EnemyStruct enemyArea; if (enemyPositionDataList != null) { for (int i = 0; i < enemyPositionDataList.Count; i++) { enemyArea = new EnemyStruct(); enemyArea.enemy = Resources.Load(GameController._instance.GetEnemyInfo(enemyPositionDataList[i].EnemyID).Name) as GameObject; enemyArea.count = enemyPositionDataList[i].EnemeyCount; enemyArea.postion = new Vector2(enemyPositionDataList[i].LeftUpPosition.x, enemyPositionDataList[i].LeftUpPosition.z); enemyArea.width = enemyPositionDataList[i].Width; enemyArea.height = enemyPositionDataList[i].Height; enemyArea.enemy.GetComponent<EnemyController>().InitEnemy(enemyPositionDataList[i].EnemyID, enemyPositionDataList[i].EnemyLevel); enemyArea.enemyList = new List<GameObject>(); this.enemyAreaList.Add(enemyArea); } } GameObject[] boss = GameObject.FindGameObjectsWithTag(Tags.boss); for (int i = 0; i < boss.Length; i++) { bossList.Add(boss[i]); } #endregion UpdateSence(); }
void ResetData(SquadronMemberStruct data) { EnemyStruct enemyStruct = SystemManager.Instance.EnemyTable.GetEnemy(data.EnemyID); CurrentHP = MaxHP = enemyStruct.MaxHP; // CurrentHP까지 다시 입력 Damage = enemyStruct.Damage; // 총알 데미지 crashDamage = enemyStruct.CrashDamage; // 충돌 데미지 BulletSpeed = enemyStruct.BulletSpeed; // 총알 속도 FireRemainCount = enemyStruct.FireRemainCount; // 발사할 총알 갯수 GamePoint = enemyStruct.GamePoint; // 파괴시 얻을 점수 AppearPoint = new Vector3(data.AppearPointX, data.AppearPointY, 0); // 입장시 도착 위치 DisappearPoint = new Vector3(data.DisappearPointX, data.DisappearPointY, 0); // 퇴장시 목표 위치 ItemDropRate = enemyStruct.ItemDropRate; // 아이템 생성 확률 ItemDropID = enemyStruct.ItemDropID; // 아이템 Drop 테이블 참조 인덱스 CurrentState = State.Ready; LastActionUpdateTime = Time.time; // isDead = false; // Enemy는 재사용되므로 초기화시켜줘야 함 }
//NOT WORKING YET public void MoveIJob() { //create all native containers and populate List <AEnemy> active = spawn.GetActiveFromPools(); NativeArray <Vector3> pos = new NativeArray <Vector3>(active.Count, Allocator.TempJob); NativeArray <Quaternion> rot = new NativeArray <Quaternion>(active.Count, Allocator.TempJob); NativeArray <EnemyStruct> enemies = new NativeArray <EnemyStruct>(active.Count, Allocator.TempJob); for (int i = 0; i < enemies.Length; i++) { enemies[i] = new EnemyStruct(active[i]); } //create job, pass in native containers EnemyMovement em = new EnemyMovement { e = enemies, finalPos = pos, finalRot = rot, fixedDeltaTime = Time.fixedDeltaTime }; //schedule, sending amount to each thread... JobHandle handle = em.Schedule(active.Count, 1); handle.Complete(); //update original values for (int i = 0; i < active.Count; i++) { active[i].transform.position = pos[i]; active[i].transform.rotation = rot[i]; } //dispose of native containers pos.Dispose(); rot.Dispose(); enemies.Dispose(); }
public void GetEnemy() { enemy = GameManager.me.enemies[Random.Range(0, GameManager.me.enemies.Count)]; }
/// <summary> /// 攻撃判断用、位置は敵の活動範囲内にいるかとか /// </summary> /// <param name="enemyStruct">敵の生成区域情報</param> /// <param name="position">判定点</param> /// <returns>いる時は、Trueを返す</returns> public bool isInArea(EnemyStruct enemyStruct, Vector3 position) { EnemyController enemyController = enemyStruct.enemy.GetComponent<EnemyController>(); if (enemyStruct.postion.x - enemyStruct.width * 0.5 - enemyController.attackDis - enemyController.followDis - playerstate.GetAttackDis() < position.x && enemyStruct.postion.x + enemyStruct.width * 0.5 + enemyController.attackDis + enemyController.followDis + playerstate.GetAttackDis() > position.x && enemyStruct.postion.y + enemyStruct.height * 0.5 + enemyController.attackDis + enemyController.followDis + playerstate.GetAttackDis() > position.z && enemyStruct.postion.y - enemyStruct.height * 0.5 - enemyController.attackDis - enemyController.followDis - playerstate.GetAttackDis() < position.z ) { return true; } else { return false; } }
public void makeEnemyAttackPlayer(Vector3 position, int width, int height, int count, GameObject prefab) { EnemyStruct Estruct = new EnemyStruct(); Estruct.count = count; Estruct.enemy = prefab; Estruct.height = height; Estruct.width = width; Estruct.postion = position; Estruct.enemyList = new List<GameObject>(); for (int j = 0; j < Estruct.count; j++) { GameObject gameObject = MakeEnemey(prefab, position, width, height); gameObject.GetComponent<EnemyController>().Lock(); gameObject.transform.LookAt(GameObject.FindGameObjectWithTag(Tags.player).transform.position); Estruct.enemyList.Add(gameObject); } managedEnemyList.Add(Estruct); }