본문 바로가기
UNITY/유니티게임스쿨

개인 포트폴리오 작성 :: AngryBird

by 램플릿 2024. 7. 2.

일반적으로 게임에서 이러한 궤적을 예측하려면 물리 엔진을 사용하여 트라젝토리를 계산하는 방법이 많이 사용됩니다. 유니티에서는 이를 위해 `Rigidbody`와 같은 물리 컴포넌트를 활용합니다. 아래는 간단한 앵그리 버드 스타일의 투사체 궤적을 그리는 코드 예제입니다.

먼저, 다음과 같은 스크립트를 새로 생성하고, 앵그리 버드가 발사될 때 이 스크립트를 적용할 수 있습니다.

```csharp
using UnityEngine;

public class ProjectilePathDrawer : MonoBehaviour
{
    public Transform target;  // 앵그리 버드 발사 대상 (타겟)
    public float initialSpeed = 10f;  // 초기 발사 속도
    public int segmentCount = 20;  // 예상 궤적을 나눌 세그먼트 수

    private LineRenderer lineRenderer;

    void Start()
    {
        lineRenderer = GetComponent<LineRenderer>();
        lineRenderer.positionCount = segmentCount;
    }

    void Update()
    {
        DrawPath();
    }

    void DrawPath()
    {
        Vector3[] segments = new Vector3[segmentCount];

        // 초기 위치 및 속도 설정
        Vector3 position = transform.position;
        Vector3 velocity = (target.position - position).normalized * initialSpeed;

        // 시간 간격 계산
        float timeDelta = 1f / initialSpeed;

        // 예상 궤적 계산
        for (int i = 0; i < segmentCount; i++)
        {
            segments[i] = position;
            velocity += Physics.gravity * timeDelta;
            position += velocity * timeDelta;
        }

        // 라인 렌더러에 궤적 설정
        lineRenderer.SetPositions(segments);
    }
}
```



이 코드는 `LineRenderer`를 사용하여 앵그리 버드의 발사 예상 궤적을 그립니다. 여기서 주요 포인트는 다음과 같습니다:

1. **target**: 발사할 목표물의 Transform을 설정합니다.
2. **initialSpeed**: 앵그리 버드의 초기 발사 속도를 설정합니다.
3. **segmentCount**: 예상 궤적을 몇 개의 세그먼트로 나눌지 설정합니다. 더 많은 세그먼트를 사용할수록 궤적이 더 부드럽게 보입니다.
4. **DrawPath()**: 궤적을 계산하고, 각 세그먼트마다 LineRenderer에 위치를 설정하여 그립니다.
5. **Physics.gravity**: 유니티의 물리 중력 값을 이용하여 중력 영향을 계산합니다.

이 코드를 앵그리 버드가 발사될 때 적절한 위치에서 호출하면, 해당 위치에서 target으로 향하는 예상 궤적을 시각적으로 표시할 수 있습니다.