73 lines
2.2 KiB
C#
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);
|
|
}
|
|
} |