Unity 벽에 막히는 대쉬 구현

이시율·2025년 7월 11일

벽에 막히는 대쉬를 구현하기위해 아래와 같이 작성하였다.

public async UniTaskVoid Rush(CancellationToken token)
    {


        float timer = 0f;
        while (timer < duration)
        {
            Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            mouseWorldPos.z = 0f;

            Vector3 playerPos = PlayerController.Instance.transform.position;
            Vector3 targetDirection = (mouseWorldPos - playerPos).normalized;

            smoothedDirection = Vector3.Lerp(smoothedDirection, targetDirection, Time.deltaTime * 2f);

            RaycastHit2D hit = Physics2D.Raycast(playerPos, smoothedDirection, 1.5f, LayerMask.GetMask("Obstacle"));
            if (hit.collider != null)
            {
                ObjectPoolManager.Instance.Return(this.gameObject, "MagicRush");
                cts?.Cancel();
            }
            else
            {
                timer += Time.deltaTime;
                PlayerController.Instance.transform.position += smoothedDirection * speed * Time.deltaTime / 2;
                transform.position = PlayerController.Instance.transform.position;
            }
            await UniTask.Yield(token);
        }
        ObjectPoolManager.Instance.Return(this.gameObject, "MagicRush");
    }

hit를 통해 벽에 닿으면 해당 비동기 실행이 멈추게하여 벽을 넘어가지 못하도록 구현.

또한 Vector3.Lerp를 통해 마우스 방향이 빠르게 바뀌어도 천천히 방향이 바뀌도록 구현하였다.

0개의 댓글