[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
에서 변수의 옵션을 조절할 수 있게 해준다.
댓글남기기