앱 만들기/유니티2D

유니티-유도탄 구현해보기.

나도 처음이야 2021. 6. 13.

마시일이 발사 될때 그냥 직진이 아닌 유도탄이 발사되면 재미있지 않을까?

바로 하기 처럼 말이다. 

오브젝트를 화면에 배치하고,

미사일 에는 BoxCollider 2D 와 Rigidbody 2D 를 적용.

전투기 에는 BoxCollider 2D 를 컴포넌트로 추가한다.

그리고, 마시일 구현부는 하기처럼 구현한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
 
public class Chaser : MonoBehaviour
{
    public string targetObjectName;
    public float speed = 1;
 
    GameObject targetObject;
    Rigidbody2D rbody;
 
    // Start is called before the first frame update
    void Start()
    {
        // 추격할 타겟 오브젝트 이름을 넣는다.
        targetObject = GameObject.Find(targetObjectName);
        rbody = GetComponent<Rigidbody2D>();
        rbody.gravityScale = 0//중력 무시
        rbody.constraints = RigidbodyConstraints2D.FreezeRotation; //Z축 회전무시
    }
 
    // Update is called once per frame
    void FixedUpdate()
    {
        // 추격할 타겟 오브젝트의 방향을 구하기.(normalized : 방향은 유지하고 길이가 1인벡터 생성. 일정한 속도로 쫓아감)
        Vector3 dir = (targetObject.transform.position - this.transform.position).normalized;
 
        float vx = dir.x * speed;
        float vy = dir.y * speed;
        // 해당 방향으로의 속도를 세팅하기
        rbody.velocity = new Vector2(vx, vy);
        //x축을 넘어가면 반전하기
        this.GetComponent<SpriteRenderer>().flipX = (vx < 0);
    }
}
 
cs

참고로, noralized 가 없을때는 두 오브젝트간의 거리를 계산하기에 거리가 멀때는 값이 커지고, 가까울때는 작아진다.

그렇기에 해당 값을 사용해서 속도를 조정하게되면 미사일이 빨라졌다가 점점 느려지게된다.

이는 특정 오브젝트별로 잘 다루어 사용하면 좋을거 같다.

감사합니다.

반응형

댓글