
Unity에서 플레이어가 물품을 픽업하고 배달할 때 시각적인 피드백을 주기 위해 차량의 색상을 변경하는 방법에 대해 자세히 알아보겠습니다. 이 과정에서 스프라이트 렌더러(Sprite Renderer)를 활용하여 차량의 색상을 동적으로 변경하는 방법을 배워보겠습니다.
우선, Unity에서 2D 게임을 개발하고 있다고 가정하겠습니다. 플레이어는 차량을 조종하며, 맵 위에 놓인 물품(Package)을 픽업하고 고객(Customer)에게 배달하는 게임입니다. 이때, 플레이어에게 물품을 픽업하거나 배달했을 때 시각적인 피드백을 주기 위해 차량의 색상을 변경하고자 합니다.

// 클래스 변수로 스프라이트 렌더러를 선언합니다.
SpriteRenderer spriteRenderer;
void Start()
{
// Start() 메서드에서 스프라이트 렌더러 컴포넌트를 가져옵니다.
spriteRenderer = GetComponent<SpriteRenderer>();
}
[SerializeField] Color32 hasPackageColor = new Color32(0, 255, 0, 255); // 초록색
[SerializeField] Color32 noPackageColor = new Color32(255, 255, 255, 255); // 흰색
if (other.tag == "Package")
{
if (!hasPackage)
{
hasPackage = true;
Debug.Log("물품이 픽업되었습니다.");
spriteRenderer.color = hasPackageColor; // 차량 색상을 초록색으로 변경
}
else
{
Debug.Log("이미 물품을 가지고 있습니다.");
}
}
else if (other.tag == "Customer")
{
if (hasPackage)
{
hasPackage = false;
Debug.Log("물품이 배달되었습니다.");
spriteRenderer.color = noPackageColor; // 차량 색상을 원래 색으로 변경
}
else
{
Debug.Log("물품이 없습니다. 배달할 수 없습니다.");
}
}
아래는 모든 변경 사항을 반영한 전체 코드입니다.
using UnityEngine;
public class Delivery : MonoBehaviour
{
// 변수 선언
bool hasPackage = false; // 게임 시작 시 물품이 없음
// 색상 변수 선언 (인스펙터에서 설정 가능)
[SerializeField] Color32 hasPackageColor = new Color32(0, 255, 0, 255); // 초록색
[SerializeField] Color32 noPackageColor = new Color32(255, 255, 255, 255); // 흰색
// 스프라이트 렌더러 변수 선언
SpriteRenderer spriteRenderer;
void Start()
{
// 스프라이트 렌더러 컴포넌트를 가져옵니다.
spriteRenderer = GetComponent<SpriteRenderer>();
// 게임 시작 시 차량의 색상을 설정합니다.
spriteRenderer.color = noPackageColor;
Debug.Log("초기 hasPackage 값: " + hasPackage);
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "Package")
{
if (!hasPackage)
{
hasPackage = true;
Debug.Log("물품이 픽업되었습니다.");
// 차량 색상을 물품이 있을 때의 색상으로 변경
spriteRenderer.color = hasPackageColor;
// 물품 오브젝트를 제거 (필요하다면)
Destroy(other.gameObject);
}
else
{
Debug.Log("이미 물품을 가지고 있습니다.");
}
}
else if (other.tag == "Customer")
{
if (hasPackage)
{
hasPackage = false;
Debug.Log("물품이 배달되었습니다.");
// 차량 색상을 물품이 없을 때의 색상으로 변경
spriteRenderer.color = noPackageColor;
}
else
{
Debug.Log("물품이 없습니다. 배달할 수 없습니다.");
}
}
}
}
이렇게 해서 플레이어가 물품을 픽업하고 배달할 때 차량의 색상을 변경하여 시각적인 피드백을 주는 방법을 알아보았습니다. 이 방법을 활용하면 게임의 재미와 직관성을 높일 수 있습니다.
using UnityEngine;
public class Delivery : MonoBehaviour
{
// 물품 소지 여부
bool hasPackage = false;
// 물품 소지 시와 비소지 시의 차량 색상
[SerializeField] Color32 hasPackageColor = new Color32(0, 255, 0, 255); // 초록색
[SerializeField] Color32 noPackageColor = new Color32(255, 255, 255, 255); // 흰색
// 스프라이트 렌더러 컴포넌트
SpriteRenderer spriteRenderer;
void Start()
{
// 스프라이트 렌더러 컴포넌트를 가져옵니다.
spriteRenderer = GetComponent<SpriteRenderer>();
// 초기 차량 색상을 설정합니다.
spriteRenderer.color = noPackageColor;
Debug.Log("초기 hasPackage 값: " + hasPackage);
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "Package")
{
if (!hasPackage)
{
hasPackage = true;
Debug.Log("물품이 픽업되었습니다.");
// 차량 색상을 물품 소지 시의 색상으로 변경
spriteRenderer.color = hasPackageColor;
// 물품 오브젝트 제거
Destroy(other.gameObject);
}
else
{
Debug.Log("이미 물품을 가지고 있습니다.");
}
}
else if (other.tag == "Customer")
{
if (hasPackage)
{
hasPackage = false;
Debug.Log("물품이 배달되었습니다.");
// 차량 색상을 물품 비소지 시의 색상으로 변경
spriteRenderer.color = noPackageColor;
}
else
{
Debug.Log("물품이 없습니다. 배달할 수 없습니다.");
}
}
}
}
주의사항:
이번 실습을 통해 Unity에서 스프라이트 렌더러를 활용하여 오브젝트의 색상을 동적으로 변경하는 방법을 배웠습니다. 이 방법은 간단하지만 게임 플레이에 큰 영향을 줄 수 있는 중요한 요소입니다.