오늘은 도움말 UI, 화면 전환 효과에 사용될 UI 디자인을 마치고
사운드를 연결하였다.
벽돌과 공, 패들 사이에서 발생하는 충돌처리를 팀 논의를 통해 해결하였다.
충돌 이슈
우리 팀의 게임에는 공과 패들이 충돌할 때 공의 속도가 우리가 의도한 대로 흘러가지 않는 큰 문제가 있었다.
문제는 Ball과 Paddle 각각에 Rigidbody2D 속성이 붙어있기 때문이었다.
두 가지 방법으로 해결하고자 하였다.
1. Paddle의 Rigidbody값을 제거하고 Paddle의 transform.position값으로 움직임을 제어
두 개의 Rigidbody값의 충돌로 인해 서로 값에 영향을 주며 발생하는 문제임으로
이와 같은 방법으로 수정 가능하였으나,
패들과 벽의 충돌을 감지할 수 없어 Paddle의 transform.position.x값을
하드코딩으로 넣어주어야하는 또 다른 안좋은 점이 발생하였다.
// ex) 이런 비슷한 방법으로,, .FixedUpdate마다 검사해주어야함
if (transform.position.x > 2.9f)
{
transform.position.x = 2.9f
}
너무 구려서 포기
2. Ball의 Rigidbody에 들어있는 바운스볼 속성 제거
바운스볼 Material이 내부적으로 속도를 마음대로 계산해버리기 때문에,
해당 속성을 제거하고 법선벡터 계산을 통해 입사각과 반사각을 구해 직접 넣어주는 방법을 사용할 수 있었다.
OnCollisionEnter2D 함수 내에 다음과 같이 normalVector 법선벡터를 구하고, 입사각을 구할 수 있었다.
Vector3 normalVector = collision.contacts[0].normal;
Vector3 reflectVector = Vector3.Reflect(dir, normalVector);
- collision.contacts[0].normal : 충돌체.충돌지점들의 첫번째 지점.법선벡터
해당 방법으로 코드를 작성하였으나 엄청난 예외 상황들이 발생했다.
해결하다가 더 좋은 아이디어가 생각났다.
3. Rigidbody끼리 충돌 시 velocity값 초기화
Physics Material 은 내부적으로 마찰과 탄성을 연산한다.
충돌하는 두 오브젝트의 마찰과 탄성이 합쳐지는 정도를 각각 연산!
이 연산 때문에 velocity가 순간순간 달라지기 때문에 발생한 문제였던 것!
따라서 ball과 paddle 충돌 시 실행되는 OnCollisionEnter2D함수 내에서
각각의 rigidbody.velocity값을 Vector3.zero로 초기화 한 후
rb2d.velocity = BallMovementDirection * speed; 코드를 작성하였더니 문제를 해결했다.
BallMoveMent.OnCollisionEnter2D
private void OnCollisionEnter2D(Collision2D collision)
{
AudioManager.Instance.BallCollisionAudio();
if (collision.gameObject.layer == 6)
{
rb2d.velocity = Vector2.zero;
rb2d.velocity = BallMovementDirection * speed;
}
}
PaddleMoveMent.OnCollisionEnter2D
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.layer == 9)
{
movementRigidbody.velocity = Vector3.zero;
}
}
관련 레퍼런스 주소
Unity - Manual: Physic Material asset reference
Create and apply a custom Physic Material Physic Material asset reference Switch to Scripting The Physic Material is a material asset that you can place on a GameObjectThe fundamental object in Unity scenes, which can represent characters, props, scenery,
docs.unity3d.com
시작화면
도움말 UI
스코어보드 반영
일시정지 화면
'게임 개발' 카테고리의 다른 글
[Unity] BrickOutGame - 완성 (0) | 2024.05.23 |
---|---|
[Unity] BrickOutGame - 보스 스테이지 (1) | 2024.05.21 |
[Unity] BrickOutGame - 오브젝트 풀링 (2) (0) | 2024.05.17 |
[Unity] BrickOutGame - 오브젝트 풀링 (1) (0) | 2024.05.16 |
Text Dungeon - 세나몬 잡기 (5) (0) | 2024.05.07 |