override public IEnumerator Perform(Enemy enemyScript) { projectiles = new List <GameObject>(); if (animator == null) { animator = enemyScript.GetComponent <Animator>(); } Vector3 playerPos = enemyScript.player.transform.position; Vector3 enemyPos = enemyScript.transform.position; Vector3 directionToPlayer = (playerPos - enemyPos).normalized; float angle = 360f / numberOfProjectile; if (angleType == angleType.Random) { offsetAngle = Random.Range(0f, 360f); } if (angleType == angleType.Rotating) { offsetAngle += rotatingSpeed; directionToPlayer = new Vector3(1, 1, 1).normalized; } if (angleType == angleType.Fixed) { directionToPlayer = new Vector3(0, 1, 1).normalized; } if (angleType == angleType.Cone) { angle = -2 * offsetAngle / numberOfProjectile; } for (int i = 0; i < numberOfProjectile; i++) { GameObject projectileObject = Instantiate(projectilePrefab, enemyPos + radiusFromBoss * (Quaternion.Euler(0, 0, i * angle + offsetAngle) * directionToPlayer), Quaternion.identity); ProjectileEnemy projectile = projectileObject.GetComponent <ProjectileEnemy>(); Vector2 dir = directionToPlayer; if (focus) { Vector3 bulletPos = projectile.transform.position; dir = (playerPos - bulletPos).normalized; } projectile.DelayLaunch(Quaternion.Euler(0, 0, i * angle + offsetAngle + bendAngle) * dir, bulletSpeed * 100f, delayStartTime); bulletAnimator = projectileObject.GetComponent <Animator>(); bulletAnimator.SetFloat("Color", color); } yield return(base.Perform(enemyScript)); }
override public IEnumerator Perform(Enemy enemyScript) { yield return(new WaitForSeconds(1f)); // dash ------------------------------------------------------------- Vector3 playerPos = enemyScript.player.transform.position; Vector3 enemyPos = enemyScript.transform.position; Vector3 directionToPlayer = (playerPos - enemyPos).normalized; float randomRadiusPerMove = (Vector3.Distance(playerPos, enemyPos) - Random.Range(1, 2)) / repeatMoveTime; for (int i = 0; i < repeatMoveTime; i++) { Vector3 targetPos = enemyPos + randomRadiusPerMove * (i + 1) * (Quaternion.Euler(0, 0, Random.Range(-30f, 30f)) * directionToPlayer); targetPos.x = Mathf.Clamp(targetPos.x, 21, 40); targetPos.y = Mathf.Clamp(targetPos.y, 28, 44); enemyScript.MoveToPosition(targetPos, 0.4f, 0); yield return(new WaitForSeconds(0.5f)); } yield return(new WaitForSeconds(0.5f)); // dash ------------------------------------------------------------- int usingProjectileNumber = numberOfProjectile + (int)((1.0f - enemyScript.HpPercent) / 0.25f); int baseRepeatTime = 3; float radiusFromBoss = 1.5f; float angle = 360f / usingProjectileNumber; float offsetAngle = 0; enemyPos = enemyScript.transform.position; for (int t = 0; t < baseRepeatTime; t++) { for (int i = 0; i < usingProjectileNumber; i++) { GameObject projectileObject = Instantiate(orbBulletPrefab, enemyPos + radiusFromBoss * (Quaternion.Euler(0, 0, i * angle + offsetAngle) * directionToPlayer), Quaternion.identity); ProjectileEnemy projectile = projectileObject.GetComponent <ProjectileEnemy>(); projectile.DelayLaunch(Quaternion.Euler(0, 0, i * angle + offsetAngle) * directionToPlayer, bulletSpeed * 100f, 1f); } offsetAngle += 20; yield return(new WaitForSeconds(0.7f)); } yield return(base.Perform(enemyScript)); }
override public IEnumerator Perform(Enemy enemyScript) { yield return(new WaitForSeconds(1)); projectiles = new List <GameObject>(); if (animator == null) { animator = enemyScript.GetComponent <Animator>(); } Vector2 playerPos = enemyScript.player.transform.position; Vector2 enemyPos = enemyScript.transform.position; Vector2 directionToPlayer = (playerPos - enemyPos).normalized; if (animator) { animator.SetFloat("Move X", directionToPlayer.x); } else { Debug.Log("NO ANIMATOR NAJAAA"); } int space = numberOfProjectile - 1; for (int i = 0; i < numberOfProjectile; i++) { Vector2 axis = Vector2.Perpendicular(directionToPlayer).normalized; Vector2 offset = axis * projectileOffset * (i - (float)space / 2); GameObject projectileObject = Instantiate(projectilePrefab, enemyPos + directionToPlayer + offset, Quaternion.identity); ProjectileEnemy projectile = projectileObject.GetComponent <ProjectileEnemy>(); Vector2 dir = directionToPlayer; if (focus) { Vector2 bulletPos = projectile.transform.position; dir = (playerPos - bulletPos).normalized; } projectile.DelayLaunch(dir, 600, delayStartTime); } yield return(base.Perform(enemyScript)); }