Project_WL/Assets/Script/Character/Projectile/Skill/Skill_Hurricane.cs

82 lines
2.5 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Skill_Hurricane : ProjectileBase
{
[Header("소용돌이 유지 시간")]
public float lifeTime = 15f;
[Header("소용돌이 데미지 범위")]
public BoxCollider m_Collider;
[Header("데미지 간격")]
public float damageGap = 0.33f;
[Header("소용돌이 이동속도")]
public float movespeed = 1f;
public ParticleSystem[] particleSystems;
public override void Set(ProjectileData _data)
{
base.Set(_data);
transform.position = _data.target.Get_position();
transform.eulerAngles = Vector3.zero;
movespeed += IsStep(1) ? Get_AwakenData(1, 1) : 0f;
_data.LifeTime = lifeTime + (IsStep(2) ? Get_AwakenData(2, 1) : 0f);
for (int i = 0; i < particleSystems.Length; i++)
{
var main = particleSystems[i].main;
main.loop = true;
}
StartCoroutine(Co_Update());
}
IEnumerator Co_Update()
{
// 고유 스킬 개화 없음
//if (IsStep(3)) m_Collider.size = new Vector3(1.70440888f, 3.86459613f, 1.84529209f);
//else m_Collider.size = new Vector3(1.37568462f, 3.86459613f, 1.46960735f);
while (m_ProjecTileData.LifeTime > 0f)
{
m_Collider.enabled = true;
yield return null;
yield return null;
m_Collider.enabled = false;
yield return new WaitForSeconds(damageGap);
m_ProjecTileData.LifeTime -= damageGap;
}
for (int i = 0; i < particleSystems.Length; i++)
{
var main = particleSystems[i].main;
main.loop = false;
}
yield return new WaitForSeconds(1f);
Off(true);
}
private void Update()
{
if (!DSUtil.CheckNull(m_ProjecTileData.target) && !m_ProjecTileData.target.IsDead())
{
var targetpos = m_ProjecTileData.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_ProjecTileData.target = Get_NearstEnemy();
if (DSUtil.CheckNull(m_ProjecTileData.target))
Off(true);
}
if (m_ProjecTileData.shooter.IsDead()) Off();
}
}