[Go-Unity] 4-2. 게임오브젝트 물리, 충돌 Rigid, Collider⭐

업데이트:

카테고리:

태그: , ,


물리, 충돌, 직렬화(SerializeField) Rigidbody, Collider, GetComponent, OnCollier, OnTrigger,

공부한 고박사의 유니티 기초를 복습하면서 정리.

1. Rigidbody 컴포넌트

2차원 공간에서 오브젝트의 물리와 중력을 담당하는 컴포넌트

image

Rigidbody 2D

 Mass : 질량

 Linear Drag : 위치에 대한 마찰력

 Angular Drag : 회전에 대한 마찰력

 Gravity Scale : 중력 계수

 Freeze ~~ : 이동 회전 고정





2. Collider 컴포넌트

2차원 공간에서 오브젝트의 충돌 범위를 나타내는 컴포넌트
범위에 따라 OO Collider 2D 로 나타낸다.

Box Collider 2D , Cirecle Collider 2D
Edge ~, Polygon ~, Capsule ~ , Composite ~

Box Collider 2D

image

  • Size : 충돌 범위 크기

Circle Collider 2D

image

  • 연산속도가 가장 빠름
  • Radius : 충돌 범위 반지름 크기

Edge Collider 2D

image

  • 점의 개수. 각 점의 위치 설정, 다양한 곡선 형태로 표현 가능
  • Edge Radius : 충돌 선의 두께
  • Point : 선을 이루는 점의 개수와 각 점의 위치

Polygon Collider 2D

poly

  • Point : 선을 이루는 점의 개수와 각 점의 위치

Capsule Collider 2D

Capsule

  • Direction : 둥근 캡슐이 표현되는 방향
    Vertical : 위/아래 Horizontal : 좌/우

Composite Collider 2D

여러 Collider 들을 묶어주는 기능
CompositeColl

  1. 빈 오브젝트 생성
  2. 묶고싶은 Collider를 가지고 있는 게임 오브젝트들을 추가
  3. 자식 오브젝트들의 Collider 컴포넌트에 있는 Used By Composite 변수 활성화

Collider

  • Offset : 충돌 범위 중심적 위치
  • Is Trigger : 활성화 되면 오브젝트가 충돌되지 않고 뚫고 지나간다.

충돌 처리

충돌 필수 조건

  1. 두 오브젝트 모두 충돌 범위인 Collider 컴포넌트를 가지고 있어야 한다.
  2. 둘 중 하나 이상의 오브젝트가 물리 처리를 담당하는 Rigidbody 컴포넌트를 가지고 있어야 한다.





3. GetComponent

게임오브젝트의 컴포넌트에 접근하는 방법

image
GetComponent<컴포넌트 이름>();

컴포넌트접근





4. 충돌 이벤트 함수

OnCollision

OnCollisionEnter2D

두 오브젝트가 충돌하는 순간 1회 호출

OnCollisionStay2D

충돌 직후 맞닿아 있는 동안 매 프레임 호출

OnCollisionExit2D

두 오브젝트가 떨어져서 충돌이 종료되는 순간 1회 호출

collisionevent.cs

public class collisionevent : MonoBehaviour
{
    [SerializeField] //직렬화    
    private Color   color;
    private SpriteRenderer spriteRenderer;
    private void Awake() {
        spriteRenderer = GetComponent<SpriteRenderer>();    //컴포넌트 가져오기
    }
    
    private void OnCollisionEnter2D(Collision2D collision) {    //충돌 시
        spriteRenderer.color=color;
    }
    private void OnCollisionStay2D(Collision2D collision) {     //충돌 중
        Debug.Log(gameObject.name + " : stay");
    }
    private void OnCollisionExit2D(Collision2D collision) {     //충돌 후
        spriteRenderer.color=Color.white;
    }

}
  • 충돌 시 색은 Inspector View에서 지정한 색으로 변경
  • 충돌 중 콘솔창에 표시
  • 충돌 후 하얀색으로 변경



OnTrigger

OnTriggerEnter2D

두 오브젝트가 충돌하는 순간 1회 호출

OnTriggerStay2D

충돌 직후 맞닿아 있는 동안 매 프레임 호출

OnTriggerExit2D

두 오브젝트가 떨어져서 충돌이 종료되는 순간 1회 호출

Triggerevent.cs

public class Triggerevent : MonoBehaviour
{
    [SerializeField]
    private GameObject moveObject;
    [SerializeField]
    private Vector3     moveDirection;
    private float       movespeed;
    private SpriteRenderer spriteRenderer;
    private void Awake() {
        movespeed = 5.0f;
        spriteRenderer = GetComponent<SpriteRenderer>();
    }
    private void OnTriggerEnter2D(Collider2D collision) {       //충돌 시
        moveObject.GetComponent<SpriteRenderer>().color = Color.black;
        spriteRenderer.color = Color.gray;
    }
    private void OnTriggerStay2D(Collider2D collision) {        //충돌 중
        moveObject.transform.position += moveDirection * movespeed*Time.deltaTime;
    }
    private void OnTriggerExit2D(Collider2D collision) {        //충돌 후
        moveObject.GetComponent<SpriteRenderer>().color =Color.white;
        spriteRenderer.color = Color.white;
        //moveObject.transform.position = new Vector3(0,4,0);
    }
}
  • 충돌 시 회색으로 변경 moveobject(Inspector View에서 지정한 sun)는 검정색으로
  • 충돌 중 moveObject(sun)은 Inspector View에서 지정한 방향으로 이동
  • 충돌 후 moveobject,충돌오브젝트 둘다 하얀색으로 변경

TriggerEvent





5. SerializeField(직렬화)

Inspector View에서 변수의 옵션을 조절할 수 있게 해준다.
SerializeField

참고 : 유니티 TOP


📔

댓글남기기