본문 바로가기

Unity

How to completely make 'Minecraft'(마인크래프트를 통째로 만드는 방법)을 따라해보며 유니티(Unity)를 연구하자 : 01-기본설정 및 평평한 땅 만들기

유튜브(Youtube) Vagabond Developer(방랑개발자)님의 How to completely make 'Minecraft'(마인크래프트를 통째로 만드는 방법)을 따라하면서 유니티(Unity)를 알아가고 있습니다.  그 정리입니다.

 

https://www.youtube.com/watch?v=xNozfY_Iah8

01-기본설정 및 평평한 땅 만들기

유니티(Unity)의 3D프로젝트를 생성

 

Assets내에 정리를 위한 폴더를 작성

Materials : 머티리얼 저장
Prefabs : 프리팹 저장
Scenes : 기본폴더, 씬 저장
Scripts : 스크립트 저장
Textures : 텍스처 저장
머티리얼

사용되는 텍스처에 대한 레퍼런스, 타일링 정보, 컬러 틴트 등을 포함하여 표면을 렌더링하는 방법을 정의

텍스처

비트맵 이미지

셰이더

조명 입력과 머티리얼 설정에 따라 렌더링된 각 픽셀의 컬러를 계산하는 수학 계산식과 알고리즘을 포함하는 작은 스크립트

프리팹

컴포넌트 및 프로퍼티가 있는 게임 오브젝트(GameObject) 오브젝트를 저장해놓은 템플릿

프리팹 에셋에 대한 모든 편집 내용은 해당 인스턴스에서 생성된 모든 인스턴스에 즉시 반영

 

이미지를 준비해 텍스처작성

구글(Google) 이미지검색에서 grass를 아이콘사이즈로 검색해서 Grass로 저장, 팝업메뉴의 (Import New Asset...)로 임포트(Import)하거나 드래그해서 Textures폴더에 넣음

 

큐브(Cube)를 추가하고 머티리얼(Material)입히기

Materials폴더내에 머티리얼(Material)를 신규작성
머티리얼(Material)에 텍스처(Texture) 설정
큐브(Cube)에 머티리얼(Material) 설정

=>3단계의 작업이지만 텍스처(Texture)를 직접 큐브(Cube)에 드래그 앤드 드롭하는 것으로도 같은 처리가 됨

큐브(Cube)의 이름을 GrassBlock으로 변경

 

GrassBlock으로 프리팹(Prefab) 작성

땅을 만들기위해 많은 GrassBlock이 복사되어야하니 관리를 위해 프리팹(Prefab)을 작성
씬(Scene)의 GrassBlock, 혹은 Hierachy내의 GrassBlock을 Prefabs폴더로 드래드 앤 드롭

프리팹(Prefab)작성 후 씬(Scene)의 GrassBlock은 불필요하므로 삭제

 

땅을 만드는 처리를 할 스크립트(Script)작성

WorldGenerator로 명명

 

WorldGenerator스크립트(Script)를 작동하게 할 오브젝트(Object)추가 및 태그(Tag)설정

Hierarchy >> Create >> Create Empty로 빈 오브젝트(Object)추가
유니티(Unity)실행시 Hierarchy내의 각각의 오브젝트(Object)가 로드되면서 설정된 스크립트(Script)가 작동

오브젝트명을 Environment로 변경
태그(Tag)를 설정하기 위해 Add Tag

Environment명으로 태그(Tag)추가

태그(Tag)를 추가한 Environment로 설정
태그(Tag)는 스크립트(Script)에서 접근하거나, 분류를 위해 설정

WorldGenerator스크립트(Script) 코딩

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

public class WorldGenerator : MonoBehaviour
{
    public int sizeX; //땅의 좌우크기
    public int sizeZ; //땅의 상하크기

    public GameObject[] blocks; //블록 저장

    // Start is called before the first frame update
    void Start()
    {
        GenerateTerrain();
    }

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

    //땅 만들기 함수
    void GenerateTerrain()
    {
        //땅의 좌우,상하 크기까지 반복하며 블록복사 배치 
        for (int x = 0; x < sizeX; x++)
        {
            for (int z = 0; z < sizeZ; z++)
            {
                Instantiate(blocks[0], new Vector3(x,0,z), Quaternion.identity);
            }
        }
    }
}
public로 선언한 속성(Property)는 유니티(Unity)에서 직접 설정 가능 : sizeX, sizeZ, blocks;

static function Instantiate (original : Object, position : Vector3, rotation : Quaternion) : Object
Instantiate : 원본 오브젝트(Object)를 복사해 Vector3위치에 Quaternion의 회전상태로 표시
Quaternion.identity : 원본 오브젝트(Object)와 동일한 회전(회전없음)

Environment오브젝트(Object)에 스크립트(Script)추가 및 설정

Hierarchy>>Environment를 선택
Inspector>>Add Component에서 WorldGenerator검색해서 추가 혹은 Script폴더에서 WorldGenerator스크립트(Script)를 드래그 앤 드롭

WorldGenerator스크립트(Script) 추가 후
SizeX, SizeZ, Blocks를 설정
Blocks는 오브젝트(Object)를 담고있는 배열로 현 단계에서는 1개만 사용하므로 Size를 1로 설정
추가로 표시되는 Element 0에 GrassBlock프리팹(Prefab)을 설정(드래그 앤 드롭 또는 선택)

최종 설정 상태

 

실행

GrassBlock프리팹(Prefab)이 복사되어 땅이 만들어짐
x, z만의 조합이므로 평평한 땅이 됨, y도 조합하면 높이있는 땅의 표현도 가능
반응형