유니티로 Pong 게임 만들기

4) 유니티로 Pong 게임 만들기 - 공이 패달과 벽에 닿았을때 튕겨내기

잡동사니123 2024. 1. 24. 12:50

목표

  • 공이 움직이지만, 일자로 무한히 움직인다.
  • 따라서 패달과 벽에 닿을때 공이 튕기게 할 것이다.

 

컴포넌트 추가

  • 공, 패달, 벽에 box collider2D를 추가한다.

 

패달 컴포넌트 rigid body 2d 수정

  • 패달 2개의 rigidbody2d의 freeze position의 x와 z를 체크해서 x,z값을 고정시킨다.
  • 고정시키지 않으면 공이 닿았을때 반동으로 인해 뒤로 밀려나고, 멋대로 회전하는 현상이 생긴다.

 

태그 설정

  • 첫번째 사진처럼 태그를 클릭한 후 Add Tag를 누르면 다음과 같은 창이 뜨는데, +버튼을 눌러 2번째 사진 처럼 태그를 추가시킨다.
  • 추가시킨후 각 태그를 오브젝트에 적용시킨다.

 

Ball.cs (스크립트)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static UnityEngine.GraphicsBuffer;

public class Ball : MonoBehaviour
{
    private Rigidbody2D rigidbody;
    public float speed = 8f;
    private Vector2 direction;


    // Start is called before the first frame update
    void Start()
    {
        rigidbody = GetComponent<Rigidbody2D>();
        direction = Vector2.one.normalized;
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if(collision.gameObject.CompareTag("Paddle"))
        {
            direction.x = -direction.x;
        }
        if (collision.gameObject.CompareTag("Wall"))
        {
            direction.y = -direction.y;
        }
    }
    // Update is called once per frame
    void Update()
    {
        rigidbody.velocity = direction * speed;
    }
}
  • 기존코드에서 충돌 처리 부분이 추가되었다.
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if(collision.gameObject.CompareTag("Paddle"))
        {
            direction.x = -direction.x;
        }
        if (collision.gameObject.CompareTag("Wall"))
        {
            direction.y = -direction.y;
        }
    }
  • 위 함수는 box collider에서 충돌 이벤트가 일어날시 실행되는 함수이다.
  • 패들 충돌 시 x값을 바꾸어 반대 방향으로 튕겨 나가게 했다
  • 벽 충돌 시 y 값을 바꾸어 반대 방향으로 튕겨 나가게 했다