82 lines
2.3 KiB
C#
82 lines
2.3 KiB
C#
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 movespeed = 3f;
|
|
|
|
Dictionary<Actor, bool> dic_HitActor = new Dictionary<Actor, bool>();
|
|
|
|
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 * 5f; // 앞으로 이동할 목표 위치 (5 단위)
|
|
|
|
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.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;
|
|
|
|
// 다시 원래 위치로 이동
|
|
elapsed = 0f;
|
|
while (elapsed < duration)
|
|
{
|
|
transform.position = Vector3.Lerp(targetPos, startPos, elapsed / duration);
|
|
elapsed += Time.deltaTime * speed;
|
|
yield return null;
|
|
}
|
|
|
|
// 발사체 종료
|
|
Off(true);
|
|
}
|
|
} |