3D 오브젝트 Color 변경
내가 처음 유니티를 공부하면서 책도 찾아보고 유튜브도 돌아다니며 공부하다가,
처음으로 띵하고 막혔던 부분이 게임 도중 어떤 이벤트가 발생 시
오브젝트의 색깔을 바꾸고 싶었는데 이 부분을 엄청나게 헤매었던 기억이 있다.
그래서 이 글에서는
유니티 창에서의 3D Object Color 변경 방법과
Script 상에서의 변경 방법을 알아보고자 한다.
■ Unity 창에서의 3D 오브젝트 Color 변경
유니티를 열어 3D Project를 생성하고, Capsule과 Plane을 생성해 보자.
생성된 오브젝트 중 Capsule의 색을 빨간색으로 변경해 보자.
생성 후 Project 창에서 우클릭 → Create → Material을 선택한다.
아래와 같이 파란 동그라미 아이콘이 생성될 것이다.
Material의 색을 빨강으로 변경할 것이기에 이름을 Red로 바꿔 봤다.
Material을 클릭해보면 인스펙터 창에 Main Maps 가 보일 것이다.
Main Maps 바로 밑에 Albedo라고 하여 네모난 색깔 창과 스포이트 모양이 보일 것이다.
스포이드 모양 옆에 네모를 클릭해보자.
아래와 같이 RGB 색을 고를 수 있는 창이 뜬다.
이 중 자신이 Capsule에 적용하고 색깔을 지정한다. 필자는 빨간색으로 선택했다.
Material의 색을 변경했으면 색을 Capsule 에 적용해보자.
Material을 드래그하여 Capsule에 갖다 넣자.
아래와 같이 Capsule의 색이 변경된 것을 확인할 수 있다.
■ 스크립트(Script)로 색 변경하기
게임을 만들다 보면 처음 지정된 색을 게임 끝까지 가져가는 경우도 있지만,
어떤 이벤트나 주변 상황에 따라 오브젝트의 색을 변경해야 할 때가 있다.
나는 기본이 없는 백지상태였기 때문에 이것을 해결하는데만 며칠을 고생했다.
간단하게 마우스 클릭 시 Capsule 색이 빨간색 ↔ 파란색으로 변하는 스크립트를 작성해 보자.
프로젝트 창에 마우스 우클릭 → Create → C# Script를 선택해서 C# 스크립트를 생성한다.
C# 스크립트 이름을 'ColorChange'로 변경하고 Capsule 오브젝트에 드래그하여 끌어다 넣는다.
그리고 스크립트를 열어보자.
간단하게 아래와 같이 코드를 입력한다.
using UnityEngine;
public class ColorChange : MonoBehaviour
{
Renderer capsuleColor;
void Start()
{
capsuleColor = gameObject.GetComponent<Renderer>();
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
if(capsuleColor.material.color != Color.blue)
{
capsuleColor.material.color = Color.blue;
}
else
{
capsuleColor.material.color = Color.red;
}
}
}
}
|
cs |
스크립트를 간단히 살펴보면,
1. Start 함수 안에 capsuleColor라는 변수에 Renderer Renderer 컴포넌트를 지정해 주었다.
2. 업데이트 문에서는 마우스 버튼의 입력을 감지한다.
- 버튼 입력이 감지가 될 경우 material의 색이 파란색이 아니라면 파란색으로,
- 파란색일 경우 빨간색으로 변환되도록 입력하였다.
저장하고 unity를 돌려보면 마우스 클릭 시마다 빨강, 파랑으로 왔다 갔다 하는 것을 볼 수 있다.
■ 유니티에서 문자로 지원하는 색상
위 Script에서 보셨듯이,
Color.red를 치면 빨간색이 되고, Color.blue를 치면 파란색이 됩니다.
이렇게 RGB 코드가 아닌 문자로 입력할 수 있는 Color는 투명까지 포함해서 총 10가지입니다.
아래 문자들을 Color. 뒤에 연결하여 적으면 해당되는 색깔이 나옵니다.
여러분, 위의 Color를 지원하는 문자 중 혹시 이상한 점 발견하셨나요?
회색이 grey, gray 두 가지로 입력할 수 있게 되어 있네요.
그렇다면 문자열 외에 다른 색은 어떻게 표현할 수 있을까요?
아래 큰 따옴표(" ") 안의 노란색 숫자 부분에 RGB 숫자를 0~255까지 입력하면 됩니다.
gameObject.GetComponent<Renderer>().material.color = new Color("0~255"/255f , "0~255"/255f, "0~255"/255f);
|
cs |
예를 들면 white 같은 경우 RGB가 (255, 255, 255) 이니까
gameObject.GetComponent<Renderer>().material.color = new Color(255/255f , 255/255f, 255/255f);
|
cs |
이와 같이 입력하면 흰색으로 변경됩니다.
'유니티' 카테고리의 다른 글
[Unity] 현재위치에서 목표위치로 이동시키기(MoveToward, SmoothDamp, Lerp, Slerp) (3) | 2020.06.12 |
---|---|
[Unity] Rigidbody 를 이용한 이동(AddForce, Velocity, GetAxis) (1) | 2020.06.11 |
[Unity] 입력값으로 오브젝트의 이동 방법(Transform.position, Translate) (0) | 2020.06.10 |
[Unity] 2D Project 에서도 3D Object Color 변경 가능할까? (0) | 2020.06.09 |
유니티 공부를 시작하게 된 이유... (0) | 2020.06.04 |