유니티 게임 개발/Jumping Rabbit

[유니티] Jumping Rabbit #6 클리어 박스 애니메이션 추가 및 버그 수정

노랑꼬리 2022. 11. 24. 22:50

※ 변경사항

 

상자 오픈 애니메이션 추가, 고속으로 이동시 벽 뚫는 버그 제거

 

 

1. 상자 오픈 애니메이션 추가

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
36
37
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
 
public class Clear : MonoBehaviour
{
  Animator anim;
 
  public GameObject ClearPanel;
 
  void Start()
  {
    anim = GetComponent<Animator>();
    anim.SetBool("Clear"false);
    ClearPanel.SetActive(false);
  }
 
  private void OnTriggerEnter2D(Collider2D Collider)
  {
    if (Collider.gameObject.tag == "Player")
    {
      anim.SetBool("Clear"true);
    }
  }
 
  private void OnCollisionEnter2D(Collision2D collision)
  {
    if (collision.gameObject.tag == "Player")
    {
      Time.timeScale = 0;
      ClearPanel.SetActive(true);
    }
  }
 
}
 
cs

 

상자에 박스 콜라이더, 캡슐 콜라이더 두가지를 주어 만들었다.

아래 필수로 지나가는 통로의 경우 콜라이더에 isTrigger 속성을 주어 이 구간을 지날 때 박스가 열릴 수 있도록

SetBool("Clear", true) 값을 주었다.

 

 

2. 버그수정

기존 버전에서는 빠른 속도로 벽 충돌 시 캐릭터가 벽을 뚫는 경우가 있었다.

물리연산은 FixedUpdate()에서 이루어지며 0.02초의 주기를 가진다. 콜라이더는 얇은 선으로 충돌을 감지한다.

오브젝트의 속도가 빨라질 경우 0.02초 사이에 이 얇은 선을 뚫고 지나가 충돌 판정이 이루어지지 않게 되어 벽을 뚫는 경우가 발생한다.

이를 해결하기 위해서 Player 오브젝트 Rigidbody에 Continuous 속성을 주었다.

기본 discrete 속성은 얇은 선에서만 충돌판정이 이루어지나 Continuous 의 경우 콜라이더 내부까지 모두 물리연산 처리 범위로 두게 되어 문제해결이 가능하다.