public override void AIStart(EnemyCore enemy) { base.AIStart(enemy); Debug.Log("AIStart"); enemy.Agent.updateRotation = false; }
public override void AIStart(EnemyCore enemy) { base.AIStart(enemy); enemy.Agent.updateRotation = false; enemy.Agent.updatePosition = false; }
private void SpawnPentagonMoveUpAndDown_Type_A(Transform spawnTr, Transform targetTr) { EnemyCore enemyCore = m_EnemyManager.SpawnEnemy(EnemyType.Pentagon, spawnTr.position, Quaternion.identity); Transform[] enemyFireTransforms = enemyCore.GetEnemyFireTransforms(); int bulletDamage = 10; float bulletSpeed = 60.0f; EntityBulletType EntityBulletType = EntityBulletType.SmallVulcan; enemyCore .SetInvincible(false) .SetPenetrable(false) .EventCore() .Sequence() .AppendActionMoveTo(targetTr.position, 20.0f) .Run(); enemyCore .EventCore() .Sequence() .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 60.0f, 5) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 60.0f, 5) .Wait(1.0f) .AppendAttackTornadoShot(enemyFireTransforms[0], bulletDamage, 50.0f, EntityBulletType, 25, 0.1f, true, AllyFlag.Enemy, Vector3.down, EventAttack.TornadoShot.Direction.ClockWise) .AppendAttackTornadoShot(enemyFireTransforms[0], bulletDamage, 50.0f, EntityBulletType, 25, 0.1f, true, AllyFlag.Enemy, Vector3.down, EventAttack.TornadoShot.Direction.CounterClockWise) .Loop(true) .Run(); }
public override void AIUpdate(EnemyCore enemy) { base.AIUpdate(enemy); var enemyPos = enemy.transform.position; if (!Target) { return; } enemy.Attack(); var targetPos = Target.transform.position; var dist = targetPos - enemyPos; var sqrLength = dist.sqrMagnitude; //移動先の設定 var attackRadius = enemy.AIParameter.MoveStartRadius; if (sqrLength > Mathf.Pow(attackRadius + enemy.AIParameter.MoveStartDifference, 2)) { enemy.Agent.destination = targetPos; } }
private void SpawnPentagonMoveUpAndDown_Type_B(Transform spawnTr, Transform targetTr) { EnemyCore enemyCore = m_EnemyManager.SpawnEnemy(EnemyType.Pentagon, spawnTr.position, Quaternion.identity); Transform[] enemyFireTransforms = enemyCore.GetEnemyFireTransforms(); int bulletDamage = 10; float bulletSpeed = 50.0f; EntityBulletType EntityBulletType = EntityBulletType.SmallVulcan; enemyCore .SetInvincible(false) .SetPenetrable(false) .EventCore() .Sequence() .AppendActionMoveTo(targetTr.position, 20.0f) .Run(); enemyCore .EventCore() .Sequence() .Wait(0.5f) .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 0, 1) .Wait(0.5f) .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 0, 1) .Wait(0.5f) .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 0, 1) .Wait(1.0f) .Loop(true) .Run(); }
private void SpawnCircleStaying_Type_A(Transform spawnTr) { EnemyCore enemyCore = m_EnemyManager.SpawnEnemy(EnemyType.Circle, spawnTr.position, Quaternion.identity); Transform[] enemyFireTransforms = enemyCore.GetEnemyFireTransforms(); int bulletDamage = 10; float bulletSpeed = 30.0f; EntityBulletType EntityBulletType = EntityBulletType.MediumBean; enemyCore .EventCore() .Sequence() .AppendActionMoveBy(new Vector3(0, -20), 5.0f) .Wait(12.0f) .AppendActionMoveBy(new Vector3(0, 50), 12.5f) .Run(); enemyCore .EventCore() .Sequence() .AppendAttackTornadoShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 30, 0.1f, true, AllyFlag.Enemy, Vector3.down, EventAttack.TornadoShot.Direction.ClockWise) .Loop(true) .Run(); }
/// <summary> /// Create player /// </summary> /// <param name="id">プレイヤーID</param> /// <param name="pos">初期ポジション</param> /// <param name="Respawnpos">リスポーンポジション</param> /// <returns></returns> EnemyCore Create(int id, Vector3 pos, Vector3 Respawnpos) { //Instantiate Player prefab EnemyCore prefab = Instantiate(EnemyPrefab, pos, Quaternion.LookRotation(Vector3.back)); var core = prefab.GetComponent <EnemyCore>(); //initialization player core.Initialize(id, pos, this); _enemies.Add(id, core); return(core); }
public void RemoveTargetedEntity(EnemyCore core) { if (m_TargetedEntityPool.ContainsValue(core) == false) { throw new Exception(core.GetEntityType() + "의 데이터가 존재하지 않습니다"); } foreach (var pair in m_TargetedEntityPool.Where(s => s.Value == core).ToList()) { m_TargetedEntityPool.Remove(pair.Key); } }
private void RaycastWeapon() { Ray ray = new Ray(mainCamera.transform.position, mainCamera.transform.forward); if (Physics.Raycast(ray, out RaycastHit hit)) { EnemyCore enemy = hit.transform.GetComponentInParent <EnemyCore>(); if (enemy) { enemy.Damage(hit.transform.tag, weaponDamage); } } }
private void OnCollisionEnter(Collision collision) { var otherLayer = collision.collider.gameObject.layer; if ((HarmLayer & 1 << otherLayer) == 1 << otherLayer) { EnemyCore enemy = collision.gameObject.GetComponent <EnemyCore>(); if (!_takenDamageFrom.ContainsKey(enemy)) { var newCoroutine = StartCoroutine(DamagerPlayer(enemy.EnemyDescription, 1f)); _takenDamageFrom.Add(enemy, newCoroutine); } } }
public override void OnAttackedOther(EnemyCore enemy, IAttacker attacker, int damage) { base.OnAttackedOther(enemy, attacker, damage); //振りむき //Debug.Log("OnAttack"); switch (attacker) { case CharacterAttacker cAttacker: enemy.Agent.SetDestination(cAttacker.Attacker.transform.position); AICheckTiming(enemy); break; } }
private void OnCollisionExit(Collision collision) { var otherLayer = collision.collider.gameObject.layer; if ((HarmLayer & 1 << otherLayer) == 1 << otherLayer) { EnemyCore enemy = collision.gameObject.GetComponent <EnemyCore>(); if (_takenDamageFrom.ContainsKey(enemy)) { StopCoroutine(_takenDamageFrom[enemy]); _takenDamageFrom.Remove(enemy); } } }
/// <summary> /// 初期化処理 /// </summary> private void Start() { //コアにプレイヤーコアをいれるよ Core = GetComponent <EnemyCore>(); //オーディオマネージャ AudioManager = AudioManager.Instance; //Coreの情報が確定したら初期化を呼び出す Core.OnInitializeAsync .Subscribe(_ => OnInitialize()); OnStart(); }
public override void AICheckTiming(EnemyCore enemy) { base.AICheckTiming(enemy); Target = null; var enemyPos = enemy.transform.position; var player = RetrieveNearestPlayer(enemyPos); if (!player) { return; } var targetPos = player.transform.position; var dist = targetPos - enemyPos; var sqrLength = dist.sqrMagnitude; //視界チェック if (sqrLength > Mathf.Pow(enemy.AIParameter.ViewRadius, 2)) { return; } Debug.Log("RadiusPass"); if (HasObstacleBetweenTarget(enemy, player)) { return; } Debug.Log("ObstaclePass"); if (!CanViewAngleTarget(enemy.transform, dist, enemy.AIParameter.ViewAngle)) { return; } Debug.Log("ViewAnglePass"); Target = player; //移動先の設定 var pos = targetPos + -dist.normalized * enemy.AIParameter.KeepRange; //変化が一定値以上ある場合に移動 if ((pos - enemyPos).sqrMagnitude > Mathf.Pow(enemy.AIParameter.MoveStartDifference, 2)) { enemy.Agent.SetDestination(pos); } //向きの設定 SetRotarion(dist); }
public override void OnAttackedOther(EnemyCore enemy, IAttacker attacker, int damage) { base.OnAttackedOther(enemy, attacker, damage); //振りむき //Debug.Log("OnAttack"); switch (attacker) { case CharacterAttacker cAttacker: var targetPos = cAttacker.Attacker.transform.position; var dist = targetPos - enemy.transform.position; //向きの設定 SetRotarion(dist); AICheckTiming(enemy); break; } }
public override void AICheckTiming(EnemyCore enemy) { base.AICheckTiming(enemy); Target = null; var enemyPos = enemy.transform.position; var player = RetrieveNearestPlayer(enemyPos); if (!player) { return; } var targetPos = player.transform.position; var dist = targetPos - enemyPos; var sqrLength = dist.sqrMagnitude; var sqrViewRadius = enemy.AIParameter.ViewRadius * enemy.AIParameter.ViewRadius; //視界チェック if (sqrLength > sqrViewRadius) { return; } Debug.Log("Radius"); if (HasObstacleBetweenTarget(enemy, player)) { return; } Debug.Log("Obstacle"); if (!CanViewAngleTarget(enemy.transform, dist, enemy.AIParameter.ViewAngle)) { return; } Debug.Log("ViewAngle"); Target = player; //移動先の設定 if (sqrLength > Mathf.Pow(enemy.AIParameter.MoveStartRadius, 2)) { enemy.Agent.destination = targetPos; } }
public override void AIUpdate(EnemyCore enemy) { base.AIUpdate(enemy); var enemyPos = enemy.transform.position; if (!Target) { return; } enemy.Attack(); var targetPos = Target.transform.position; var dist = targetPos - enemyPos; //向きの設定 SetRotarion(dist); }
public virtual void AIUpdate(EnemyCore enemy) { //タイミングチェック if ((_timer -= Time.deltaTime) < 0) { _timer += enemy.AIParameter.CheckTimer; AICheckTiming(enemy); } //向きの更新 if (!enemy.Agent.updateRotation) { var transform = enemy.transform; transform.rotation = Quaternion.RotateTowards( transform.rotation, Quaternion.Euler(0, transform.eulerAngles.y + Vector3.SignedAngle(transform.forward, _targetDirection, Vector3.up), 0), enemy.AIParameter.AngularSpeed * Time.deltaTime); } }
/// <summary> /// Создать на сцене противника со случайным описанием /// </summary> public void SpawnRandomEnemy() { //Берем случайное описание врага var randomDesc = _enemiesData[Random.Range(0, _enemiesData.Count)]; //Копируем описание var descriptionInstance = Instantiate(randomDesc); EnemyCore newEnemy = GetAvailableEnemy(); if (newEnemy != null) { newEnemy.transform.position = new Vector3(Random.Range(-MaximumSpawnPosition, MaximumSpawnPosition), 1.5f, Random.Range(-MaximumSpawnPosition, MaximumSpawnPosition)); newEnemy.EnemyDescription = descriptionInstance; newEnemy.gameObject.SetActive(true); } else { Debug.LogError("Слишком много врагов на сцене"); } }
public override void OnAttackedOther(EnemyCore enemy, IAttacker attacker, int damage) { base.OnAttackedOther(enemy, attacker, damage); //振りむき //Debug.Log("OnAttack"); switch (attacker) { case CharacterAttacker cAttacker: var targetPos = cAttacker.Attacker.transform.position; var dist = targetPos - enemy.transform.position; var pos = targetPos + -dist.normalized * enemy.AIParameter.KeepRange; //向きの設定 SetRotarion(dist); enemy.Agent.SetDestination(pos); AICheckTiming(enemy); break; } }
private void SpawnCircleUpLoopFollowing() { EnemyCore enemyCore = m_EnemyManager.SpawnEnemy(EnemyType.Circle, m_PathHolderList[0][0].position, Quaternion.identity); Transform[] enemyFireTransforms = enemyCore.GetEnemyFireTransforms(); EntityBulletType EntityBulletType = EntityBulletType.MediumBean; int bulletDamage = 10; float bulletSpeed = 50.0f; List <Vector3> vectorList = new List <Vector3>(); for (int i = 0; i < m_PathHolderList[0].Count; i++) { vectorList.Add(m_PathHolderList[0][i].position); } enemyCore .EventCore() .Sequence() .AppendActionMovePaths(vectorList.ToArray(), 15.0f) .Run(); enemyCore .EventCore() .Sequence() .Wait(1.5f) .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 0f, 1) .AppendAttackCornShot(enemyFireTransforms[2], bulletDamage, bulletSpeed, EntityBulletType, 0f, 1) .AppendAttackCornShot(enemyFireTransforms[3], bulletDamage, bulletSpeed, EntityBulletType, 0f, 1) .AppendAttackCornShot(enemyFireTransforms[4], bulletDamage, bulletSpeed, EntityBulletType, 0f, 1) .Wait(1.0f) .AppendAttackTornadoShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 10, 0.1f, true, AllyFlag.Enemy, Vector3.down, EventAttack.TornadoShot.Direction.ClockWise) .Loop(true) .Run(); }
public EnemyCore SpawnEnemy(EnemyType type, Vector3 positiom, Quaternion rotation) { EnemyCore core = (EnemyCore)Instantiate(GetEnemyPrefabObject(type), positiom, rotation).GetComponent <EnemyCore>(); if (core == null) { throw new System.Exception("코어가 널값입니다."); } switch (type) { case EnemyType.Pentagon: return(core.SetEnemyType(type) .SetEntityType(EntityType.Enemy) .SetScore(50) .SetHp <EnemyCore>(50)); case EnemyType.Circle: return(core.SetEnemyType(type) .SetEntityType(EntityType.Enemy) .SetScore(100) .SetHp <EnemyCore>(50)); case EnemyType.BossHexagon: return(core.SetEnemyType(type) .SetEntityType(EntityType.Enemy) .SetScore(1500) .SetHp <EnemyCore>(2500)); default: break; } return(null); }
private void Awake() { core = GetComponent <EnemyCore>(); DoAwake(); }
void Start() { cEnemyCore = GetComponent <EnemyCore>(); agent = GetComponent <NavMeshAgent>(); navTimer = Random.Range(0.0f, 2.0f); }
private void _stage_onEnemySpawned(EnemyCore enemy) { enemy.onDied += Enemy_onDied; }
public void BindCore(EnemyCore core) { enemyCore = core; }
public void SetResist(EnemyCore in_core) { in_core.OnDied .Subscribe(d => deadReasons.Add(d)) .AddTo(gameObject); }
private void SpawnBoss() { EnemyCore enemyCore = m_EnemyManager.SpawnEnemy(EnemyType.BossHexagon, new Vector3(30.0f, 107.5f, -5.0f), Quaternion.identity); Transform[] enemyFireTransforms = enemyCore.GetEnemyFireTransforms(); int bulletDamage = 10; float bulletSpeed = 50.0f; EntityBulletType EntityBulletType = EntityBulletType.BigBean; enemyCore .OnDestroyCallBack(() => RemoveTargetedEntity("BOSS")) .EventCore() .Spawn() .AppendActionMovePaths(new Vector3[] { new Vector3(30.0f, 80.0f, -5.0f), new Vector3(20.0f, 70.0f, -5.0f), new Vector3(40.0f, 65.0f, -5.0f), new Vector3(30.0f, 80.0f, -5.0f), }, 20.0f) .AppendCallBack(() => { enemyCore.EventCore() .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) // .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Wait(1.0f) .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10) .Run(); }) .Sequence() .Wait(20.0f) .AppendActionRotateBy(new Vector3(0, 0, 180.0f), 1.0f) .Spawn() .AppendAttackTornadoShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 20, 0.1f, false) .Sequence() .Wait(1.5f) .AppendAttackTornadoShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 20, 0.1f, false) .Spawn() .AppendAttackGuidedShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 30, 0.3f, () => m_PlayerManager.GetPlayer()) .AppendAttackGuidedShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 30, 0.3f, () => m_PlayerManager.GetPlayer()) .Sequence().Wait(9.0f) .Loop(true) .Run(); AddTargetedEntity("BOSS", enemyCore); }
public void EnemyDie(EnemyCore enemy) //敌人死亡 { world.money += enemy.MONEY; showMoney.text = world.money.ToString(); }
/*--------------------------------------------------------------*/ #endregion #region UNITY_DEFAULT_METHODS void Awake() { cEnemyCore = GetComponent <EnemyCore>(); }