[Go-Unity] 4-2. 게임오브젝트 물리, 충돌 Rigid, Collider⭐
카테고리: Go Unity
물리, 충돌, 직렬화(SerializeField) Rigidbody, Collider, GetComponent, OnCollier, OnTrigger,
공부한 고박사의 유니티 기초를 복습하면서 정리.
1. Rigidbody 컴포넌트
2차원 공간에서 오브젝트의 물리와 중력을 담당하는 컴포넌트

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

Size: 충돌 범위 크기
Circle Collider 2D

- 연산속도가 가장 빠름
Radius: 충돌 범위 반지름 크기
Edge Collider 2D

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

Point: 선을 이루는 점의 개수와 각 점의 위치
Capsule Collider 2D

Direction: 둥근 캡슐이 표현되는 방향
Vertical: 위/아래Horizontal: 좌/우
Composite Collider 2D
여러 Collider 들을 묶어주는 기능

- 빈 오브젝트 생성
- 묶고싶은 Collider를 가지고 있는 게임 오브젝트들을 추가
- 자식 오브젝트들의 Collider 컴포넌트에 있는
Used By Composite변수 활성화
Collider
Offset: 충돌 범위 중심적 위치Is Trigger: 활성화 되면 오브젝트가 충돌되지 않고 뚫고 지나간다.
충돌 처리
충돌 필수 조건
- 두 오브젝트 모두 충돌 범위인
Collider컴포넌트를 가지고 있어야 한다. - 둘 중 하나 이상의 오브젝트가 물리 처리를 담당하는
Rigidbody컴포넌트를 가지고 있어야 한다.
3. GetComponent
게임오브젝트의 컴포넌트에 접근하는 방법
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,충돌오브젝트 둘다 하얀색으로 변경

5. SerializeField(직렬화)
Inspector View에서 변수의 옵션을 조절할 수 있게 해준다.

댓글남기기