반응형
protected IEnumerator ProcessProjectileParabolicAttack(EffectHandler skillEffect, Transform target, float delay = 0f)
{
if(delay > 0)
{
yield return new WaitForSeconds(delay);
}
skillEffect.InvokeEffect();
var speed = UnitHandler.GetAnimationSpeed();
var maximumHeightArrivalTime = fireTime / speed / 2F / 1000F;
var startPosition = skillEffect.transform.position;
var endPosition = target.position;
var maxHeight = Math.Max(startPosition.y, target.position.y) + Height;
//높이가 음수 or 0이 되면 안된다.
var mh = maxHeight - startPosition.y;
var g = 2 * mh / (maximumHeightArrivalTime * maximumHeightArrivalTime);
var vY = Mathf.Sqrt(2 * g * mh);
//도착 지점 도달 시간
//float a = g;
//float b = -2 * vY;
//float c = 2 * (endPosition.y - startPosition.y);
//var dat = (-b + Mathf.Sqrt(b * b - 4 * a * c)) / (2 * a);
var dat = fireTime / speed / 1000F ;
//X축 속도
var vX = -(startPosition.x - endPosition.x) / dat;
var time = 0F;
//vX = speed * vX;
for (; ; )
{
time += Time.deltaTime;
var tx = startPosition.x + vX * time;
var ty = startPosition.y + (vY * time) - (0.5f * g * time * time);
if(float.IsNaN(tx) == true)
{
skillEffect.Clear();
break;
}
var tpos = new Vector3(tx, ty, 0);
var angle = LookAt(skillEffect.transform.position, tpos);
skillEffect.transform.position = tpos;
skillEffect.transform.eulerAngles = new Vector3(0, 0, angle);
var distance = skillEffect.transform.position - target.position;
if (distance.sqrMagnitude <= 0.2F)
{
skillEffect.Clear();
break;
}
//안전빵
if(skillEffect.transform.position.y <= 0)
{
skillEffect.Clear();
break;
}
yield return null;
}
yield break;
}
protected float LookAt(Vector3 obj, Vector3 lookObject)
{
var dir = lookObject - obj;
if(dir.x < 0)
{
return Mathf.Atan2(obj.y - lookObject.y, obj.x - lookObject.x) * Mathf.Rad2Deg;
}
else
{
return Mathf.Atan2(lookObject.y - obj.y, lookObject.x - obj.x) * Mathf.Rad2Deg;
}
}
반응형
'개발관련 > Unity' 카테고리의 다른 글
해상도 고정 (0) | 2023.09.02 |
---|---|
TextMeshPro 폰트 생성 (0) | 2023.07.31 |
클리커 게임 단위 구하기 (0) | 2023.03.15 |
Addressables 동기 사용법 및 주의점 (0) | 2022.09.12 |
could not create asset from file could not be read (0) | 2021.01.06 |