본문 바로가기

코딩 공부/Unity C#

Bouncer 충돌 처리

오브젝트가 벽에 부딪힐 때마다 체력과 투명도가 감소하여 10번 부딪히면 파괴된다

 

- 중력 삭제, 카메라의 가장자리 부분에 엣지 콜라이더 생성 및 머티리얼(마찰0, 탄력10) 추가

- Bouncer 스크립트와 오브젝트(rigidBoby2D, Bouncer 스크립트) 추가

 

처음 코드 작성(오류 발생)

- Main Camera: 사면의 Edge Collider(Material: 0, 10)

- Object: Bouncer, Circle Collider (Material: 0, 10), RigidBody2D (Material: 0, 10)

public class Bouncer : MonoBehaviour
{
    // 게임 오브젝트의 체력
    int healty = 100;
    float opacity = 1.0f;
    SpriteRenderer spriteRenderer;

    // Start is called before the first frame update
    void Start()
    {
        spriteRenderer = GetComponent<SpriteRenderer>();

        Rigidbody2D rb2d = GetComponent<Rigidbody2D>();
        rb2d.AddForce(new Vector2(5, 5), ForceMode2D.Impulse);
    } 

    private void OnCollisionEnter2D(Collision2D collision)
    {
        
        healty -= 10;
        opacity -= 0.1f;

        if (healty <= 0)
        {
            Destroy(gameObject);
        }
    }
}

- opcity 변수는 필요없음. color의 투명도 값(알파값)은 디폴트 1.0f이다.

- spriteRenderer.color 값을 불러오지 못함

파라미터 값은 R, G, B, A 로 되어 있
// 완전한 빨간색 (불투명)
Color red = new Color(1.0f, 0.0f, 0.0f, 1.0f);

 

코드 수정

public class Bouncer : MonoBehaviour
{
    // 변수 저장
    int healty = 100;
    SpriteRenderer spriteRenderer;

    // Start is called before the first frame update
    void Start()
    {
        // color 컴포넌트 저장
        spriteRenderer = GetComponent<SpriteRenderer>();

        // rigidBody 컴포넌트 저장 후  속도의 방향 및 크기 설정
        Rigidbody2D rb2d = GetComponent<Rigidbody2D>();
        rb2d.AddForce(new Vector2(2, 3), ForceMode2D.Impulse);
    } 

    private void OnCollisionEnter2D(Collision2D collision)
    {
        // 투명도 감소시키기
        Color color = spriteRenderer.color;
        color.a -= 0.1f;
        spriteRenderer.color = color;

        // 충돌 시 체력 10 감소
        healty -= 10;

        // 체력이 0이 되면 오브젝트 파괴
        if (healty <= 0)
        {
            Destroy(gameObject);
        }

        // 체력 확인용 출력
        Debug.Log(healty);
    }
}

- 충돌을 3번 한 뒤(남은 체력: 70) 빠른 속도로 오브젝트가 튕겨져 화면 밖으로 이탈하는 오류 발생

>>> 탄력성이 너무 커서 생긴 문제로 판단함(문제 해결을 위해 탄력성을 줄임)

- Materterial 메인캠의 Edge Collider에만 적용

- Bouncieness 10 → 1 로 축소

- 오브젝트의 벡터 크기 (2, 2)로 축소

 

위와 같이 수정하였더니 오브젝트의 이동 속도는 줄어들었지만 문제 사라짐

마찰 파라미터를 올리는 방법도 고안하였지만, 문제에서 마찰이 없는 환경을 구현했다고 했음

'코딩 공부 > Unity C#' 카테고리의 다른 글

오브젝트의 충돌 및 질량  (2) 2024.07.21
string 타입 예제  (0) 2024.07.20
메서드 헤더  (0) 2024.07.17
클래스 작성 및 Random  (0) 2024.07.13
추상화 연습  (0) 2024.07.13