using System.Collections; using System.Collections.Generic; using UnityEngine; public class Skill_Hurricane : ProjectileBase { [Header("소용돌이 유지 시간")] public float lifeTime = 15f; [Header("소용돌이 데미지 범위")] public float damageArea = 5f; [Header("데미지 간격")] public float damageGap = 0.33f; [Header("소용돌이 이동속도")] public float movespeed = 1f; public override void Set(ProjectileData _data) { _data.eStartPos = eProjectileStartPos.Target; base.Set(_data); movespeed += IsStep(1) ? Get_AwakenData(1, 1) : 0f; _data.LifeTime = lifeTime + (IsStep(2) ? Get_AwakenData(2, 1) : 0f); StartCoroutine(Co_Update()); } IEnumerator Co_Update() { var step3 = IsStep(3); if (step3) damageArea += Get_AwakenData(3, 1); while (m_ProjectTileData.LifeTime > 0f) { yield return new WaitForSeconds(damageGap); m_ProjectTileData.LifeTime -= damageGap; var enemies = Get_Enemies(transform, damageArea); Attack_Enemies(enemies, step3); } Off(); } private void Update() { if (!DSUtil.CheckNull(m_ProjectTileData.target) && !m_ProjectTileData.target.IsDead()) { var targetpos = m_ProjectTileData.target.Get_position(); transform.position = Vector3.MoveTowards(transform.position, targetpos, Time.deltaTime * movespeed); // Create a new position with the y value you want Vector3 newPosition = transform.position; newPosition.y = 0.01f; // Set the y-value transform.position = newPosition; } else { m_ProjectTileData.target = Get_NearstEnemy(); if (DSUtil.CheckNull(m_ProjectTileData.target)) Off(true); } if (m_ProjectTileData.shooter.IsDead()) Off(); } void Attack_Enemies(List enemies, bool airborne) { for (int j = 0; j < enemies.Count; j++) { if (DSUtil.CheckNull(enemies[j])) continue; if (j >= enemies.Count) break; if (airborne) enemies[j].KnockedAirborne(); enemies[j].Get_Damage(Get_DamageInfo()); } } }