내일배움캠프/TIL

[내배캠][Unity6기][TIL] 1. 빗물받는 르탄이(5~6)

binary는 호남선 2024. 9. 3. 23:03

Preview

- Rigidbody 2D

- Colliders 2D

-- Collider와 Rigidbody 상호작용

- OnCollisionEnter2D

- Destory

- this

- Tag

-- CompareTag

- 오브젝트 랜덤으로 생성

-- 위치를 랜덤으로 생성

-- 타입을 랜덤으로 생성

- Color


Rigidbody 2D

- 게임 오브젝트의 중력, 질량, 드래그, 운동량에 대한 반응과 같은 물리 기반 동작 제어

- 2D이므로 XY 평면을 따라만 이동할 수 있으며 해당 평면에 수직인 축에서만 회전할 수 있음

참고 : https://docs.unity3d.com/kr/2022.3/Manual/rigidbody2D.html

https://docs.unity3d.com/kr/2022.3/Manual/class-Rigidbody2D.html

 

Colliders 2D

- 물리적 충돌을 위한 게임 오브젝트의 모양을 정의

- Edit Collider로 모양(초록색선으로 표시됨) Sprite에 맞게 조정 가능

- 주로 사용되는 Colliders

항목 설명
Circle Collider 2D  원형 충돌 영역에 사용
Box Collider 2D 정사각형 및 직사각형 충돌 영역에 사용
Capsule Collider 2D 타원형 또는 마름모 모양의 충돌 영역에 사용

참고: https://docs.unity3d.com/kr/2022.3/Manual/Collider2D.html

Collider와 Rigidbody 상호 작용

- 충돌 검사 시 Collider와 Rigidbody를 함께 활용하면 정확한 충돌 판정 보장

- collision matrix (0열이 자신, 0행이 상대)

참고 : https://vionixstudio.com/2019/09/04/unity-collider-explained/

OnCollisionEnter2D

- 충돌이 감지될 때 호출되는 이벤트 함수

- 충돌에 관한 정보를 매개 변수로 받을 수 있음

- 이와 같은 물리 이벤트 함수들은 이름이 On으로 시작

참고 : https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionEnter2D.html

https://docs.unity3d.com/kr/560/Manual/EventFunctions.html

    private void OnCollisionEnter2D(Collision2D collision)
    {
    	// 충돌 시 실행될 로직 작성
    }

Destroy

- 인자로 들어온 것을 없애는 함수

- 인자로 오브젝트, 컴포넌트, 에셋을 넘길 수 있음

참고 : https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionEnter2D.html

https://docs.unity3d.com/kr/530/Manual/CreateDestroyObjects.html

Destroy(this.gameObject);	// 스크립트 가지고 있는 오브젝트(자기 자신) 파괴

this

- 클래스가 사용되는 현재 인스턴스를 가리킴

- 다른 오브젝트와 스크립트가 붙어있는 오브젝트(자기 자신) 오브젝트를 구분

- 클래스 내의 멤버에 접근할 수 있음

Tag

- 스크립팅 목적으로 게임 오브젝트를 식별하는데 사용

- 플레이어가 적, 사물, 수집품과 상호 작용하는지 판단해야 하는 콜라이더 조작 스크립트의 트리거에 활용

참고 : https://docs.unity3d.com/kr/2022.3/Manual/Tags.html

CompareTag

public bool CompareTag(string tag);

- 오브젝트가 인자로 들어온 태그와 일치하면 true, 일치하지 않으면 false를 반환

- 오브젝트의 태그를 문자열로 비교하는 것보다 CompareTag 사용을 권장

if (other.CompareTag("Player"))	// 다른 오브젝트의 태그가 플레이어면
{
    Destroy(other.gameObject);	// 그 오브젝트 파괴
}

참고 : https://docs.unity3d.com/ScriptReference/Component.CompareTag.html

https://sorting.tistory.com/12

오브젝트 랜덤으로 생성

위치를 랜덤하게 생성

void Start()
{
    float x = Random.Range(x축 범위 시작점(float), x축 범위 종료점(float));
    float y = Random.Range(y축 범위 시작점(float), y축 범위 종료점(float));
    transform.position = new Vector3(x, y, 0);
}

타입을 랜덤하게 생성

void Start()
{
     int type = Random.Range(1, 4);	// 1~3 타입 랜덤으로 생성
     // 타입에 따라 크기와 점수 다르게 설정
     switch (type)
     {
         case 1:
             size = 0.8f;
             score = 1;
             break;
         case 2:
             size = 1.0f;
             score = 2;
             break;
         case 3:
             size = 1.2f;
             score = 3;
             break;
         default:
             break;
     }
     transform.localScale = new Vector3(size, size, 0);
}

Color

public Color(float r, float g, float b, float a);

- 인자로 r, g, b, a 값을 받아 새로운 색을 생성하는 메서드

- float 값이므로 원하는 값(정수)에 255f를 나누어 연산

SpriteRenderer renderer;

void Start()
{
    renderer = GetComponent<SpriteRenderer>();
    renderer.color = new Color(100 / 255f, 100 / 255f, 1f, 1f);
    // (R: 100, G: 100, B: 255, A: 255)
}

참고 : https://docs.unity3d.com/ScriptReference/Color-ctor.html