이번 장에서는 ItemBox와 EndPoint 객체간 상호작용(Trigger) 에 대한 기능을 구현할 것이다.
Unity에서 충돌 처리를 하기 위해서는 Collider 컴포넌트가 필수적이다. Collider는 오브젝트의 물리적 경계를 정의하며, 다른 오브젝트와의 충돌을 감지한다.
그러나 모든 충돌이 물리적인 반응을 가져야 할 필요는 없다. "Is Trigger" 속성을 활성화하면 오브젝트가 물리적으로 부딪치지 않더라도 특정 이벤트를 발생시킬 수 있다.
Is Trigger를 사용하려면:
이제 이 오브젝트는 물리적으로 부딪치지 않더라도 충돌을 감지하고 OnTriggerEnter
, OnTriggerExit
, OnTriggerStay
등의 이벤트를 사용할 수 있다.
Unity에서 오브젝트를 효과적으로 관리하고 식별하려면 태그(Tag)를 사용할 수 있다. 태그는 오브젝트의 분류를 돕고, 코드 내에서 특정 오브젝트를 빠르게 찾을 수 있는 방법을 제공한다.
EndPoint 오브젝트에 태그를 설정하면, 그 오브젝트와의 충돌을 쉽게 감지하고 처리할 수 있다.
태그를 설정하는 방법은 다음과 같다:
이제 코드 내에서 other.tag == "EndPoint"
와 같은 조건문을 사용하여 EndPoint 오브젝트와의 충돌을 쉽게 식별하고 처리할 수 있다. 태그는 게임 로직을 단순화하고, 유연한 설계를 가능하게 하는 강력한 도구이다.
Unity에서 충돌을 감지하려면 OnTriggerEnter
메서드를 사용할 수 있다. 이 메서드는 오브젝트가 충돌을 시작하는 순간 호출된다. 아래의 단계를 통해 ItemBox와 EndPoint의 충돌을 감지하고 처리할 수 있다:
Tag 설정: 먼저, EndPoint 오브젝트에 "EndPoint" 태그를 설정해야 한다. 이를 통해 ItemBox가 EndPoint와 충돌하는지 쉽게 판별할 수 있다.
Collider 설정: ItemBox에 Collider 컴포넌트를 추가하고 "Is Trigger"를 활성화해야 한다.
충돌 이벤트 작성: ItemBox 스크립트에 OnTriggerEnter
메서드를 작성하고, 충돌한 오브젝트의 태그를 확인한다:
void OnTriggerEnter(Collider other)
{
if(other.tag == "EndPoint")
{
Debug.Log("충돌");
}
}
EndPoint와 충돌 시 ItemBox의 색깔을 변경하려면 다음과 같은 과정을 따른다.
private Renderer myRenderer; // Renderer 컴포넌트 참조 변수
void Start()
{
myRenderer = GetComponent<Renderer>(); // Renderer 컴포넌트 할당
}
OnTriggerEnter
메서드는 Trigger 옵션을 활성화한 Collider와 충돌 시 호출된다.void OnTriggerEnter(Collider other)
{
if(other.tag == "EndPoint") // EndPoint 태그와 충돌 시
{
myRenderer.material.color = Color.red; // 색깔을 빨간색으로 변경
}
}
충돌이 종료된 후 원래 색으로 복귀하려면 원래 색을 저장하고 OnTriggerExit
메서드를 활용한다.
private Color originalColor; // 원래 색을 저장할 변수
void Start()
{
originalColor = myRenderer.material.color; // 원래 색 저장
}
OnTriggerExit
메서드는 Trigger 옵션을 활성화한 Collider와의 충돌이 끝날 때 호출된다.void OnTriggerExit(Collider other)
{
if(other.tag == "EndPoint") // EndPoint 태그와의 충돌 종료 시
{
myRenderer.material.color = originalColor; // 원래 색으로 복귀
}
}
이러한 방식을 통해 EndPoint와의 충돌을 감지하고 ItemBox의 색깔을 동적으로 변경할 수 있다.
Rigidbody는 Unity에서 물리적 특성을 오브젝트에 적용하는 컴포넌트이다.
Drag 속성의 정의: Drag는 공기저항이나 마찰과 같은 힘을 표현한다. 오브젝트가 움직이는 방향과 반대로 작용하는 힘이다.
Drag의 역할: Drag 값을 높이면 오브젝트의 움직임이 점점 둔해진다. 예를 들어, 공을 던지면 공기 저항으로 인해 점점 속도가 감소한다.
Drag 설정 방법: Inspector창이나, Rigidbody 컴포넌트에서 Drag 속성을 직접 설정할 수 있다.
Rigidbody rb = GetComponent<Rigidbody>();
rb.drag = 10.0f; // Drag 값을 5로 설정
이번 장에서는 EndPoint와 ItemBox의 충돌 처리, 색상 변경, 원래 색으로의 복귀, 그리고 Rigidbody의 Drag 설정에 대해 배웠다. 또한 Rigidbody의 Drag 설정은 오브젝트의 움직임을 더 자연스럽게 만들어준다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ItemBox : MonoBehaviour
{
private Renderer myRenderer; // ItemBox의 Renderer 컴포넌트를 참조
public Color touchColor; // 충돌시 바뀔 색을 참조할 변수
void Start()
{
myRenderer = GetComponent<Renderer>(); // Renderer 컴포넌트를 가져옴
}
void Update()
{
// 매 프레임마다의 로직은 여기에
}
// 트리거 콜라이더와 충돌했을 때 자동으로 실행
private void OnTriggerEnter(Collider other)
{
if (other.tag == "EndPoint") // 태그가 "EndPoint"일 경우
{
myRenderer.material.color = touchColor; // 색을 touchColor로 변경
Debug.Log("충돌"); // 콘솔에 "충돌" 로그 출력
}
}
// 트리거 콜라이더와 충돌이 끝났을 때 자동으로 실행
private void OnTriggerExit(Collider other)
{
if (other.tag == "EndPoint") // 태그가 "EndPoint"일 경우
{
myRenderer.material.color = Color.white; // 색을 흰색으로 변경
Debug.Log("충돌 해제"); // 콘솔에 "충돌 해제" 로그 출력
}
}
}