유니티로 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 값을 바꾸어 반대 방향으로 튕겨 나가게 했다