앱 만들기/유니티2D

유니티-충돌 처리 하기(1) 방향 전환

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

게임에서 오브젝트가 충돌했을때의 처리를 하는 것은 게임의 기본 완성으로 가기위한 첫번째 단추이다.

즉, 적군의 총알에 맞거나 장애물에 부딪히는등의 처리를 이와 같이 할 수 있기때문이다.

결과 화면을 먼저 보자.

자동차는 양쪽 블럭벽에 충돌하는 순간 방향을 바꾸어서 계속 움직인다.

 

충돌이후 자동차는 방향을 바꾼다.

 

위 처리를 위해서는

화면에 두개의 블럭 및 자동차를 배치한다. 

그리고 블럭 컴포넌트에는 Box Collider 2D 를 차량에는 Box Collider 2D 와 물리엔진인 Rigidbody2D 를 적용한다.

이후, 자동차 컴포넌트의 움직임 제어를 위해서 코드를 하기 처럼 작성한다.

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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class MoveOnRightLeft : MonoBehaviour
{
    public float speed = 1;
    Rigidbody2D rbody;
 
    // Start is called before the first frame update
    void Start()
    {
        rbody = GetComponent<Rigidbody2D>();
        // 소스상에서 중력 무시 및 Z축 회전 방지를 한다
        rbody.gravityScale = 0;
        rbody.constraints = RigidbodyConstraints2D.FreezeRotation;    
    }
 
    // Update is called once per frame
    void FixedUpdate()
    {
        // 물리엔진의 속도로 X축으로 이동
        rbody.velocity = new Vector2(speed, 0);        
    }
 
    private void OnCollisionEnter2D(Collision2D collision)
    {
        // 충돌시 방향을 바꾼다.
        speed = -speed;
        this.GetComponent<SpriteRenderer>().flipX = (speed < 0);
    }
}
 
cs

 

상기 코드에서 중요한 점은 바로 충돌시 호출되는 콜백함수 

OnCollisionEnter2D() 이다. 개발자는 이곳에서 충돌이 후 처리될 코드를 작성해주어야 한다.

자신의 게임에 맞게...

감사합니다 ^^

반응형

댓글