Unity/그래픽스프로그래밍

Unity Mesh Create Basic _ 유니티 면 만들기 기본

minquu 2022. 9. 18. 21:48
반응형

☝ 개요

 

- 3D Tool 에서 Mesh는 기본적으로 Vertex (점)으로 이루워졌음

  그래서 런타임 중이나 Procedual Modeling를 하려면 기본적으로 점을 다룰줄 알아야한다.

  그렇기에 면 하나를 만드는 과정을 정리하려고 한다.

 

using UnityEngine;

[RequireComponent(typeof(MeshFilter))]

public class MeshGeneration : MonoBehaviour
{
    Mesh mesh;

    Vector3[] vertices;
    int[] triangels;

    void Start()
    {
        mesh = new Mesh();
        GetComponent<MeshFilter>().mesh = mesh;

        CreateShape();
        UpdateMesh();
    }

    void CreateShape()
    {
        vertices = new Vector3[]
        {
            new Vector3(0,0,0),
            new Vector3(0,0,1),
            new Vector3(1,0,0),
            new Vector3(1,0,1)
        };

        triangels = new int[]
        {
            0, 1, 2,
            1, 3, 2
        };
    }

    void UpdateMesh()
    {
        mesh.Clear();

        mesh.vertices = vertices;
        mesh.triangles = triangels;

        mesh.RecalculateNormals();
    }
}

 

 

빈 오브젝트를 만들어서 본 스크립터를 넣어서 플레이를 하면 면 하나가 만들어진다.

 

핵심은 메시에 

 

        mesh.vertices = vertices;
        mesh.triangles = triangels;

 

에 버텍스와 면을 만들어주는 것이다.

 

 

    void CreateShape()
    {
        vertices = new Vector3[]
        {
            new Vector3(0,0,0),
            new Vector3(0,0,1),
            new Vector3(1,0,0),
            new Vector3(1,0,1)
        };

        triangels = new int[]
        {
            0, 1, 2,
            1, 3, 2
        };
    }

 

이 메서드에서 Vector 값으로 점을 만들어주고,

그 점에 대한 위치로 면을 만들어준다.

 

이미지로 보자면

 

먼저 처음 new Vector3(0,0,0) 으로 점 하나를 만들어 주었다.

 

총 4개의 점을 만들어 준다. 

 

 

점을 만들어 주었다면,

 

        triangels = new int[]
        {
            0, 1, 2,
            1, 3, 2
        };

 

면을 만들어줄 포인트 지점을 잡아준다.

 

 

        triangels = new int[]
        {
            0, 1, 2,
            1, 3, 2
        };

 

0 1 2  하나  1 3 2 하나를 만들어준다.

 

면은 삼각형 이기 때문에 사각형을 만들려면 두 개가 필요하다.

 

이렇게 하면 사각형 하나를 만들 수 있다.

 

 

추가적으로 만약 하나 면을 이렇게 만들 수도 있을 것이다.

 

using UnityEngine;

[RequireComponent(typeof(MeshFilter))]

public class MeshGeneration : MonoBehaviour
{
    Mesh mesh;

    Vector3[] vertices;
    int[] triangels;

    void Start()
    {
        mesh = new Mesh();
        GetComponent<MeshFilter>().mesh = mesh;

        CreateShape();
        UpdateMesh();
    }

    void CreateShape()
    {
        vertices = new Vector3[]
        {
            new Vector3(0,0,0),
            new Vector3(0,0,1),
            new Vector3(1,0,0),
            new Vector3(1,0,1),
            new Vector3(1,1,0),
            new Vector3(1,1,1)
        };

        triangels = new int[]
        {
            0, 1, 2,
            1, 3, 2,
            2, 4, 3,
            4, 5, 3
        };
    }

    void UpdateMesh()
    {
        mesh.Clear();

        mesh.vertices = vertices;
        mesh.triangles = triangels;

        mesh.RecalculateNormals();
    }
}

 

 

 

굳!  👍

반응형