Project_WL/Assets/Script/Character/Projectile/Projectile/Projectile_StopAndColliderC...

73 lines
2.2 KiB
C#

using System;
using System.Collections;
using UnityEngine;
public class Projectile_StopAndColliderControl : ProjectileBase
{
public Collider m_Collider;
[Header("충돌박스가 켜질 딜레이 시간")]
public float ColliderActiveDealyTime = 0f;
[Header("다단히트 시간(0 초과 시 우선 적용)")]
public float LoopTime = 0f;
[Header("다단히트 갯수(다단히트 시간이 0이하 시 적용)")]
public int Loop = 1;
[Header("충돌박스가 꺼졌다 켜지는 시간(0 == 1프레임)")]
public float DelayTime = 1f;
[Header("충돌박스가 켜져있는 프레임")]
public int ColliderActiveFrame = 2;
[Header("오브젝트 off 타임 딜레이 시간")]
public float OffDelayTime = 0f;
protected Action act_End;
public override void Set(ProjectileData _data)
{
base.Set(_data);
if (DSUtil.CheckNull(m_Collider))
m_Collider = GetComponent<Collider>();
transform.eulerAngles = Vector3.zero;
m_Pierce = true; // 이펙트 사라지지 않게
StartCoroutine(Co_Collider());
}
protected IEnumerator Co_Collider()
{
m_Collider.enabled = false;
yield return new WaitForSeconds(ColliderActiveDealyTime);
if (LoopTime > 0f)
{
var loop = LoopTime;
while (loop > 0f)
{
yield return new WaitForSeconds(DelayTime);
loop -= DelayTime;
m_Collider.enabled = true;
for (int j = 0; j < ColliderActiveFrame; j++)
yield return null;
m_Collider.enabled = false;
}
}
else
{
for (int i = 0; i < Loop; i++)
{
yield return new WaitForSeconds(DelayTime > 0f ? DelayTime : Time.deltaTime);
m_Collider.enabled = true;
for (int j = 0; j < ColliderActiveFrame; j++)
yield return null;
m_Collider.enabled = false;
}
}
yield return new WaitForSeconds(OffDelayTime);
act_End?.Invoke();
act_End = null;
Off(true);
}
}