본문 바로가기

Unity3d

유니티에서 발사체 발사 로직 구현하기: 기본 원리

시작하기 전에

  • 유니티에서 발사체 발사 로직을 구현하기 위해서는 물리학의 기본 원리를 이해하는 것이 중요합니다. Unity의 Physics 엔진을 사용하여 실제와 유사한 발사체 동작을 시뮬레이션할 수 있습니다. 이 글에서는 중력, 초기 속도, 발사 각도와 같은 요소들을 어떻게 활용하여 발사체 로직을 구현할 수 있는지 알아보겠습니다.

발사체 로직의 기본 원리

  • 발사체의 움직임은 주로 물리학의 투사체 운동 원리를 따릅니다. 유니티에서 이를 구현하기 위해서는 Rigidbody 컴포넌트와 Physics 클래스를 사용합니다. Rigidbody는 게임 오브젝트에 물리적인 속성을 부여하고, Physics 클래스는 중력과 같은 물리적인 힘을 시뮬레이션합니다.
public class Launcher : MonoBehaviour
{
    public Rigidbody projectile;
    public Transform shotPoint;
    public float launchForce = 700f;

    void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            Rigidbody projectileInstance = Instantiate(projectile, shotPoint.position, shotPoint.rotation) as Rigidbody;
            projectileInstance.AddForce(shotPoint.forward * launchForce);
        }
    }
}
  • 위 코드는 발사체를 발사하는 기본적인 로직을 담고 있습니다. 사용자가 Fire1(기본적으로 마우스 왼쪽 버튼 또는 컨트롤러의 A 버튼)을 누르면, Instantiate 함수를 통해 발사체의 복제본을 생성하고, AddForce 함수를 사용하여 발사체에 힘을 가해 발사합니다.

발사 각도 조절하기

  • 발사체를 특정 각도로 발사하려면 발사 지점의 회전을 조절해야 합니다. 발사 각도는 발사체의 도달 거리와 높이에 직접적인 영향을 미칩니다. 아래는 발사 각도를 조절하는 방법에 대한 코드 예제입니다.
public void SetLaunchAngle(float angle)
{
    shotPoint.eulerAngles = new Vector3(-angle, shotPoint.eulerAngles.y, shotPoint.eulerAngles.z);
}
  • shotPoint의 eulerAngles를 조절하여 발사 각도를 설정할 수 있습니다. 이때, X축 기준으로 각도를 조절하므로, X축 값을 -angle로 설정하여 각도를 조정합니다. 각도는 도(degree) 단위로 설정됩니다.

발사체에 효과 추가하기

  • 발사체 로직에 더 실감나는 효과를 추가하고 싶다면, Particle System이나 Trail Renderer를 사용할 수 있습니다. Particle System을 사용하여 발사 시 연기나 불꽃 효과를 추가하고, Trail Renderer로 발사체의 궤적을 시각적으로 표현할 수 있습니다.
public ParticleSystem muzzleFlash;
public TrailRenderer trailRenderer;

void LaunchProjectile()
{
    muzzleFlash.Play();
    Rigidbody projectileInstance = Instantiate(projectile, shotPoint.position, shotPoint.rotation) as Rigidbody;
    projectileInstance.AddForce(shotPoint.forward * launchForce);
    projectileInstance.gameObject.AddComponent<TrailRenderer>().material = trailRenderer.material;
}
  • muzzleFlash.Play()를 호출하여 발사 시 효과를 재생합니다. Instantiate로 생성된 발사체에 TrailRenderer 컴포넌트를 추가하여 발사체가 날아가는 궤적을 표현할 수 있습니다.

최적화 팁

  • 발사체 게임에서 성능 최적화는 매우 중요합니다. 발사체를 많이 생성하고 파괴하는 과정은 자원을 많이 소모할 수 있으므로, 오브젝트 풀링(Object Pooling) 기법을 사용하는 것이 좋습니다. 오브젝트 풀링은 필요한 발사체 오브젝트를 미리 생성해두고, 사용하지 않는 오브젝트를 재사용하여 자원 소모를 줄이는 기법입니다.