// Update is called once per frame void Update() { CommonEnemy norm = gameObject.GetComponent <CommonEnemy>(); Vector3 Angle = (norm.player.position - gameObject.transform.position).normalized; if (fireTime > 0) { fireTime -= Time.deltaTime; }//Recharge firing if (norm.difference <= range & fireTime <= 0) { Instantiate(projectile, gameObject.transform.position, Quaternion.Euler(0, 0, PublicFunctions.FindAngle(Angle.x, Angle.y))); fireTime += 1; }//Fire if player is in range and if firing is ready if (norm.difference > 50) { transform.Translate(new Vector3(0, 0, 0)); } else { if (norm.difference > range * 0.7) { transform.Translate(norm.direction * Time.deltaTime * norm.speed); } else if (norm.difference < range * 0.7) { transform.Translate(-norm.direction * Time.deltaTime * norm.speed); } }//Move to player if it's at a certain range. Back up if player's too close }
// Update is called once per frame void Update() { CommonEnemy norm = gameObject.GetComponent <CommonEnemy>(); if (norm.difference > 50) { transform.Translate(new Vector3(0, 0, 0)); } else { transform.Translate(norm.direction * Time.deltaTime * norm.speed); } }
}//Finds the angle between two objects public static void DamageEnemy(Collision2D hit, int damage) { if (hit.gameObject.CompareTag("Enemy")) { CommonEnemy c = hit.gameObject.GetComponent <CommonEnemy>(); c.EnemyDamage(damage); } if (hit.gameObject.CompareTag("EnemyShield")) { EnemyShield s = hit.gameObject.GetComponent <EnemyShield>(); s.EnemyDamage(damage); } }//Damages an enemy or enemyshield
// Update is called once per frame void Update() { CommonEnemy norm = gameObject.GetComponent <CommonEnemy>(); norm.isProtector = true; Vector3 against = norm.player.position; GameObject[] partners = GameObject.FindGameObjectsWithTag("Enemy"); if (norm.difference < 100) { Vector3 partner = getShortest(partners, 50).transform.position; Vector3 destination = guardPosition(against, partner, 12); Vector3 direction = destination - gameObject.transform.position; gameObject.transform.Translate(direction * Time.deltaTime * norm.speed); } }
private void LookForPlayer(CommonEnemy enemy) { Collider[] targets = Physics.OverlapSphere(enemy.EnemyView.transform.position, _enemyData._radiusOfView, _playerLayer); for (int i = 0; i < targets.Length; i++) { Transform target = targets[i].transform; Vector3 dirToTarget = (target.position - enemy.EnemyView.transform.position).normalized; Debug.DrawRay(target.position, enemy.EnemyView.transform.position - target.position, Color.red); if (Vector3.Angle(enemy.EnemyView.transform.forward, dirToTarget) < _enemyData._viewAngle / 2) { float distanceToTarget = Vector3.Distance(enemy.EnemyView.transform.position, target.position); if (!Physics.Raycast(enemy.EnemyView.transform.position, dirToTarget, distanceToTarget, _obstacleLayer)) { _seeingPlayer = true; Attack(target, enemy); } else { _seeingPlayer = false; } } } }
private void InitializeEnemies() { var enemyFabric = new EnemyFabric(_enemyData); _enemies = new List <CommonEnemy>(); var spawnPoints = _spawnPointController.Data.EnemySpawnPoints; foreach (var spawnPoint in spawnPoints) { var enemy = enemyFabric.Instantiate(spawnPoint.Type, spawnPoint.transform.position, Quaternion.identity); if (enemy == null) { continue; } var commonEnemy = new CommonEnemy(); commonEnemy.EnemyView = enemy; commonEnemy.Gun = new CommonGun(enemy.transform.Find("Gun").transform.Find("BulletSpawner"), _enemyData._amountOfAmmo, _enemyData._rateOfFire); commonEnemy.NavMeshAgent = enemy.GetComponent <NavMeshAgent>(); _enemies.Add(commonEnemy); } }
private void Attack(Transform player, CommonEnemy enemy) { enemy.EnemyView.transform.LookAt(player); enemy.NavMeshAgent.SetDestination(player.position); enemy.Gun.Shoot(); }