반응형
물리 관련 컴포넌트
- 2D : Component - Physics 2D
- 3D : Component - Physics
Rigidbody2D 컴포넌트
- 물리와 중력 담당
RigidBody 적용 시 중력은 바로 적용됨
다른 오브젝트와의 상호작용이 필요한 경우는 Collider 컴포넌트가 필요
Collider2D 컴포넌트
- 오브젝트의 충돌 범위를 나타냄
Circle Collider 2D가 가장 연산속도가 빠름
Edge Collider 2D는 점의 개수를 정하고 점의 위치를 바꾸어서 다양한 곡선이나 형태로 표현 가능
- Edge Radius로 두께 설정가능
Polygon Collider 2D
- 텍스처 모양과 비슷한 모양으로 생성 -> 연산량이 많아짐
Capsule Collider 2D
- 보통 사람 형태의 캐릭터에 사용
Composite Collider 2D
- 다른 게임오브젝트의 Collider 2D 들을 하나로 묶어주는 역할
- Box , Polygon 만 가능
- 빈 게임 오브젝트 생성
- Composite Collider 2D 컴포넌트 추가
- 하나로 묶고 싶은 Collider 2D 컴포넌트를 가지고 있는 게임 오브젝트들을 Compite Collider 2D 가지고 있는 게임 오브젝트의 자식오브젝트로 설정
- 자식 오브젝트들의 Collider 2D 컴포넌트에 있는 "Used By Composite" 변수 활성화
서로 다른 두 오브젝트가 충돌하기 위한 필수 조건
- 두 오브젝트 모두 Collider 가지고 있어야 함
- 둘 중 하나 이상의 오브젝트가 물리 처리를 담당하는 Rigidbody 컴포넌트를 가지고 있어야 한다
두 오브젝트가 Collider를 가지고 충돌 했을 때 별다른 이벤트를 등록하지 않으면 막힌 것에 튕겨져 나오는 것처럼 처리 됨
컴포넌트를 가져오는 법
- GetComponent<컴포넌트> 변수명
- transform은 모든 오브젝트에 포함되는 컴포넌트이므로 바로 사용가능 했던 것
transform += .. 이동 코드는 물리적인 처리가 되지 않고 이동만 신경씀
rigid2D.velocity에 의한 이동으로 처리 시 "장애물 만나게 되면 그대로 정지"와 같은 물리적 처리가 기반된 이동이 가능
-> 오브젝트가 Rigid2D component를 가지고 있어야 함
충돌 이벤트 함수
- OnCollisionEnter2D
- 두 오브젝트가 충돌하는 순간 1회 호출
- OnCollisionStay2D
- 두 오브젝트가 충돌하고 있는 동안 매프레임 호출
- OnCollisionExit2D
- 두 오브젝트가 떨어지는 순간 1회 호출
[SerializeField]
- 변수 바로 윗줄에 작성
- Inspector View에서 변수의 옵션 조절할 수 있도록 해줌
- script file에서 아래와 같이 변수 지정하면 Inspector View Scipt 부분에서 Color 제어 UI가 생성됨
- [SerializeField]
private Color color;
Sample
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 OnCollisionExit2D(Collision2D collision)
{
spriteRenderer.color = Color.white;
}
}
물리적인 충돌 없이 이벤트 호출
- 접근 시 뚫고 지나갈 수 있음, 영역안에 물체를 넣는 경우 사용
- OnTriggerEnter2D
- 두 오브젝트가 충돌하는 순간 1회 호출
- OnTriggerStay2D
- 두 오브젝트가 충돌하고 있는 동안 매프레임 호출
- OnTriggerExit2D
- 두 오브젝트가 떨어지는 순간 1회 호출
Sample
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TriggerEvent : MonoBehaviour
{
[SerializeField]
private GameObject moveObject;
[SerializeField]
private Vector3 moveDirection;
private float moveSpeed;
private void Awake()
{
moveSpeed = 5.0f;
}
private void OnTriggerEnter2D(Collider2D collision)
{
Debug.Log("touch");
moveObject.GetComponent<SpriteRenderer>().color = Color.black;
}
private void OnTriggerStay2D(Collider2D collision)
{
moveObject.transform.position += moveDirection * moveSpeed * Time.deltaTime;
}
private void OnTriggerExit2D(Collider2D collision)
{
moveObject.GetComponent<SpriteRenderer>().color = Color.white;
moveObject.transform.position = new Vector3(0, 4, 0);
}
}
※ Trigger 동작하려면 충돌하는 두 물체 Collider 중 하나 이상에 IsTrigger 체크되어있어야 함
반응형
'Unity' 카테고리의 다른 글
Instantiate 활용 예제 (0) | 2023.07.23 |
---|---|
게임 오브젝트 생성 함수 (0) | 2023.07.23 |
게임 오브젝트 이동 (0) | 2023.07.23 |
이벤트 함수 (0) | 2023.07.23 |
스크립트 개요 (0) | 2023.07.23 |