using System.Collections; using System.Collections.Generic; using UnityEngine; public class Skill_Bead : ProjectileBase { public AudioClip m_Clip; public BoxCollider m_Collider; [Header("도달 거리")] public float dist = 15f; [Header("이동속도")] public float movespeed = 3f; Dictionary dic_HitActor = new Dictionary(); public override void Set(ProjectileData _data) { _data.eStartPos = eProjectileStartPos.ShooterCenter; base.Set(_data); dic_HitActor.Clear(); bool isStep2 = IsStep(2); _data.Action_OnHit = hitter => { if (isStep2) { if (!dic_HitActor.ContainsKey(hitter)) dic_HitActor.Add(hitter, true); else hitter.Stun(Get_AwakenData(2, 1), true); } }; if (IsStep(3)) act_returnDmg = dmg => { _data.shooter.Heal(dmg * Get_AwakenData(3, 1)); _data.shooter.Heal_MP(dmg * Get_AwakenData(3, 1)); }; StartCoroutine(Co_Bead()); } IEnumerator Co_Bead() { // 시작 위치 설정 var startPos = m_ProjecTileData.shooter.Get_Center_position(); var targetPos = startPos + transform.forward * dist; float duration = 2f; // 이동 시간 float elapsed = 0f; // 경과 시간 // y값 고정 targetPos.y = startPos.y; var speed = movespeed + (IsStep(1) ? movespeed * Get_AwakenData(1, 1) : 0f); m_Collider.enabled = true; // 앞으로 이동 while (elapsed < duration) { transform.LookAt(targetPos); transform.position = Vector3.Lerp(startPos, targetPos, elapsed / duration); elapsed += Time.deltaTime * speed; yield return null; } transform.position = targetPos; //yield return null; //m_Collider.enabled = false; //yield return null; //m_Collider.enabled = true; //yield return null; yield return new WaitForSeconds(0.5f); // 다시 원래 위치로 이동 elapsed = 0f; while (elapsed < duration) { transform.LookAt(targetPos); transform.position = Vector3.Lerp(targetPos, startPos, elapsed / duration); elapsed += Time.deltaTime * speed; yield return null; } // 발사체 종료 Off(true); } }