앱 만들기/유니티2D 게임 만드는 방법

유니티 유도탄 및 따라가는 스크립트 만드는 방법

나도처음이야 2024. 11. 3.
반응형

유도탄 및 따라가는 동작을 수행하는 스크립트를 만들어본다.

유도탄이 따락는 무비

해당 예제에서는 원이 차량을 따라간다

예제를 만들기 위해서는

유니티 화면

1. 자동차 오브젝트를 씬뷰에 등록

2. 유도탄이 되는 스크립트는 Circle 이라는 오브젝트에 등록한다.

3. 스크립트 구현 방법

따라가는 동작의 핵심은 2가지 다

첫번째로, GameObject.Find() 함수 인자로 목표 타겟이 될 오브젝트 이름을 입력받는다.

두번째 ,  목표 오브젝트 위치 - 현재 오브젝트 위치 의 값을 벡터로 가지고 있으면서 계속해서 rigidibody의 속도 값을 갱신한다.

유니티에서 벡터는 방향과 힘을 가지고 있는 단위로, 모든 움직임의 기본이 된다.

Vector3 dir = (target.transform.position - this.transform.position).normalized; 

 

위 코드에서 normalized 역할은 크기가 1인 벡터를 만든다.

두 위치간의 거리가 길고 짧고를 떠나 항상 동일 크기를 유지해야지만 유도탄 혹은 따라가는 오브젝트가 일정 속도로 목표지점을 향해 날아간다. 이 값이 없으면 멀어질때는 빨라지고, 가까워지면 느려지게 된다.

일정한 속도로 따라가기 위해서는 normalized 가 필요하다.

using UnityEngine;

public class Chase : MonoBehaviour
{
    // 목표 오브젝트 이름
    public string targetName;
    // 이동 스피드
    public float speed = 1;

    GameObject target;
    Rigidbody2D rd;

    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
        //목표 오브젝트 찾기
        target = GameObject.Find(targetName);
        //중력 0으로 세팅후 회전하지 않도록
        rd = GetComponent<Rigidbody2D>();
        rd.gravityScale = 0;
        rd.constraints= RigidbodyConstraints2D.FreezeRotation;
    }

    private void FixedUpdate()
    {
        Vector3 dir = (target.transform.position - this.transform.position).normalized;
        float vx = dir.x * speed;
        float vy = dir.y * speed;
        rd.linearVelocity = new Vector2(vx, vy);
        this.GetComponent<SpriteRenderer>().flipX = (vx < 0);
    }
}

 

start() 함수에서는 

- 목표 타겟을 찾고

- 현재 오브젝트의 중력을 제거한다.

 

FixedUpdate()함수에서는

- 두 물체간의 거리를 측정하여 벡터(방향과 힘을 구함)로 만든 다음 

  현재 오브젝트의 속도에 해당 값을 대입한다. 즉, 목표타겟을 따라가는 코드를 만든다.

-  x값의 음수여부에 따라 이미지를 반전 시킨다. 

 

참고로, speed 값을 음수로 주면 도망가는 스크립트가 탄생한다.

반응형

댓글