Unity VR 프리팹 생성, 색상 변환 스크립트로 해보자

kyoungminn·2021년 11월 25일
0

블로그의 첫 포스팅을 졸업프로젝트로 할 줄은 몰랐다.
1-2학년 때부터 시작해야지 생각은 했는데 결국 3학년이 끝나갈 때가 되어서야 시작한다. 분발하자...🤦‍♀️


내년 1학기까지 진행할 졸업프로젝트를 간단히 설명하자면 'VR 브레인스토밍 기반 협업 툴'이다.
단순히 브레인스토밍을 할 수 있는 서비스는 많지만 이를 VR환경에서, 사람들과 협업하며 할 수 있는 툴은 거의 없었다. 코로나 시국이 큰 영향을 주긴 했다.

이 프로젝트의 가장 큰 특징은 바로 '블록'을 사용한다는 것이다. 어렸을 때 블록쌓기 놀이 하듯 팀원들과 브레인스토밍을 할 수 있는 것이다. 우리 팀은 현재 이 블록을 제어하는 기능을 구현 중인데 나는 그중에서도 블록 생성을 맡았다.
블록 생성을 구현하기 위해서는 블록 프리팹을 생성해야하고, 블록의 메세지와 색상도 설정할 수 있어야 한다.

지금 부터 그 과정을 설명하려고 한다.
(Unity VR환경 세팅이 되어 있다는 가정 하에 이루어지는 튜토리얼이다.)

블록 프리팹 만들기

우선 Hierarchy창에서 마우스 오른쪽 버튼 클릭 -> 3D Object -> Cube -> 블록으로 이름 바꾸기의 과정을 거쳐 블록을 생성한다.

블록을 생성한 뒤에는, 이를 프리팹으로 만들어 주어야 앞으로 재사용하기 훨씬 쉬워진다. 프리팹으로 만드는 방법은 간단하다. Hierarchy창에 있는 블록 오브젝트를 하단 Project창 -> Assets -> Resources -> Prefab 폴더로 드래그 해준다. 해당 폴더가 없을 경우에는 마우스 오른쪽 버튼을 클릭하여 새로 생성하면 된다.

드래그 후 프리팹이 만들어지면 위 사진과 같이 Hierarchy창에서 블록 오브젝트가 하늘색 글씨로 바뀐다. 게임에서 보이지 않도록 오브젝트를 삭제한다.
❗ 이때, Hierarchy창의 블록은 '블록 프리팹'의 인스턴스이므로 프리팹 자체를 수정하고 싶을 때는 하단 Prefab 폴더안의 블록을 수정해야한다.

프리팹 복제, 생성하기

이제 프리팹이 만들어졌으니 스크립트를 사용하여 프리팹을 동적으로 복제 또는 생성하는 방법을 알아보려고 한다.

먼저 Block이라는 이름의 스크립트를 생성한다.

프리팹을 복제하여 인스턴스화할 때에는 Instantiate( )함수를 사용한다. 스크립트에 넣을 코드는 아래와 같다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Block : MonoBehaviour
{
    public GameObject block;

    // Start is called before the first frame update
    void Start()
    {
        block = (GameObject)Instantiate(Resources.Load("Prefab/block")); 
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

이 코드를 유니티에서 동작하게 만드려면 GameManager라는 빈 오브젝트를 만든 뒤 스크립트를 드래그하여 넣어준다.

GameManager 하위 Block 스크립트에 생긴 Block 오브젝트 칸에 이전에 생성했던 프리팹 원본을 드래그하여 넣어 준다.

이후 게임을 실행하면 프리팹의 인스턴스, 즉 블록이 생성되는 것을 확인할 수 있다.

블록 색상 변환하기

다음은 블록의 색상을 변환하는 방법이다. 특히, 버튼을 클릭하면 색상이 변하는 방식을 사용해보려고 한다.
블록의 색상을 변환하기 위한 버튼을 먼저 만들어 보자. 블록을 생성했을 때와 비슷한 방식이다.
Hierarchy창에서 마우스 오른쪽 버튼 클릭 -> XR -> UI Canvas를 통해 canvas를 생성해준 뒤, Canvas에서 마우스 오른쪽 버튼 클릭 -> UI -> Button을 클릭하면 버튼이 생성된다.

이제 버튼에 연결할 스크립트를 작성해야 한다. ChangeColor라는 이름의 새로운 스크립트를 생성한다. 스크립트에 넣을 코드는 아래와 같다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChangeColor : MonoBehaviour
{
    public void ChangeGreen()
    {
        GameObject.Find("block(Clone)").GetComponent<Renderer>().material.color = Color.green;
    }
}

코드는 간단한데 먼저 GameObject.Find("block(Clone)")를 통해 생성된 블록 인스턴스를 찾아주고, 다음으로 해당 인스턴스의 Renderer 컴포넌트 중 material.color 속성을 가져와 초록색으로 변경해주는 코드이다.

코드 작성을 완료하면 이전에 만들어 두었던 버튼에 스크립트를 드래그해서 넣어준다. 그 다음 On Click()의 Runtime Only 밑에 버튼 오브젝트를 드래그에서 넣는다. 버튼을 넣으면 Runtime Only 옆 화살표를 눌러 ChangeColor -> ChangeGreen을 선택한다.

이 과정까지 완료한 뒤, 게임을 시작하자. 블록이 생성되고 버튼을 누르면 블록의 색상이 초록색으로 변하는 것을 볼 수 있다.

profile
해보자 게임개발👻

0개의 댓글