ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • jump skill
    카테고리 없음 2025. 5. 12. 17:06

    디아블로2의 바바리안 점프 스킬처럼 특정 위치로 빠르게 점프하는 캐릭터 이동을 유니티에서 구현할 때, tween을 사용할 수는 있지만 몇 가지 사항을 고려해서 선택하는 것이 좋습니다.


    Tween 사용 (예: DOTween)

    장점:

    • 간편하게 위치 보간 가능 (DOMove, DOLocalMove, etc.).
    • 커브 기반의 이펙트나 easing 설정이 쉬움.
    • 코드가 짧고 직관적임.

    단점:

    • 물리 연동이 약함 (리짓바디와 충돌처리가 자연스럽지 않음).
    • 경로가 단순 보간이라서 호를 그리는 점프 구현은 직접 커브를 만들어야 함.
    • 중간에 다른 객체와 충돌 시 즉시 대응하기 어려움.

    사용 예:

    transform.DOMove(targetPosition, 1.0f).SetEase(Ease.OutQuad);
    

    호를 그리려면 Y축을 위로 상승 후 하강하는 별도 커브 계산 필요.


    물리 기반 점프 (Rigidbody + Force/Velocity 사용)

    장점:

    • 중력/충돌/반응 등의 물리 연동이 자연스러움.
    • 장애물/충돌 처리에 강함.

    단점:

    • 목표 지점으로 정확히 도달시키려면 힘/각도 계산이 필요함.
    • 구현이 복잡해질 수 있음.

    사용 예:

    Vector3 direction = (target - transform.position);
    direction.y = CalculateJumpVelocity(target);
    rigidbody.velocity = direction;
    

    이 경우, 포물선 경로를 물리 엔진으로 실제로 시뮬레이션하게 됨.


    커스텀 포물선 경로 계산 (추천)

    물리 엔진을 직접 사용하지 않더라도, 수학적으로 포물선 경로를 계산해서 transform.position을 업데이트하는 방식이 디아블로2 같은 연출에 더 적합할 수 있습니다.

    장점:

    • tween보다 더 유연한 제어 가능.
    • 물리를 사용하지 않아도 원하는 포물선 모양 구현 가능.
    • 점프 도중 공격 중지, 공중 이펙트 등 자유도 높음.

    예제 코드 (코루틴 기반):

    IEnumerator JumpToPosition(Vector3 start, Vector3 end, float duration, float height)
    {
        float time = 0;
        while (time < duration)
        {
            float t = time / duration;
            float yOffset = Mathf.Sin(Mathf.PI * t) * height;
            transform.position = Vector3.Lerp(start, end, t) + Vector3.up * yOffset;
            time += Time.deltaTime;
            yield return null;
        }
        transform.position = end;
    }
    

    ✅ 결론

    방식 추천도 설명

    Tween (DOTween 등) ⭐⭐ 간단하지만 정밀 제어가 어렵고 물리 처리 미약.
    Rigidbody 기반 물리 점프 ⭐⭐⭐ 자연스러운 물리 효과, 구현은 약간 복잡.
    커스텀 포물선 이동 ⭐⭐⭐⭐ 연출과 제어가 자유로워 게임 스킬 구현에 가장 적합.

    원하는 효과가 "디아블로2 바바리안 점프"처럼 전투 중 특정 위치로 날아가며 연출/판정이 포함된 이동이라면 커스텀 포물선 방식 + 충돌 체크가 가장 적합합니다.

Designed by Tistory.