이제부턴 수업 역순으로 올라가는 식으로 적겠습니다.

 

매쉬를 코드로 생성해볼껍니다.

vertices -> uv -> normals -> triangles 순으로 만들어야합니다.

일단 빈 게임 오브젝트를 생성합니다.

 그 후 스크립트 생성하고 매쉬를 생성할 게임 오브젝트를 동적할당해줍니다.

        GameObject go = new GameObject();
        go.name = "Handmade GameObject";
        go.tag = "Player";
        
        MeshFilter mf = go.AddComponent<MeshFilter>();
        Mesh mesh = new Mesh();
        mesh.name = "HandmadeMesh";

매쉬필터 컴포지션을 가져오고 매쉬를 동적할당합니다.

 

 

버텍스(vertices) 정점이라는 뜻으로 점을 찍습니다.

중심점을 잡고 시작합니다. 게임오브젝트란걸 생성해놨으므로 그게 중심이 됩니다.

-0.5,0.5,0 --- 0.5,0.5,0

      |                |

-0.5,-0.5,0----0.5,-0.5,0

x, y, z 값까지 씁니다.

 

매쉬를 생성할 시 버텍스 부분 코드

 mesh.vertices = new Vector3[]
        {
            new Vector3(-0.5f, 0.5f,0f), new Vector3(0.5f,0.5f, 0f),
            new Vector3(-0.5f, -0.5f, 0f) ,new Vector3(0.5f, -0.5f, 0f)
        };

 

uv는 좌표의 이름이며 엔진마다 시작위치는 다르지만 일단 유니티 상에선 0 ~ 1로 비율을 구할때 사용하며 유니티에 경우 좌표는 x,y로 왼쪽 아래 부터 시작합니다.

사각형을 그려보면 

0 , 1 --- 1 , 1

  |           |

0 , 0 ----1 , 0

(시작) 이런식으로 그려집니다.

메쉬를 생성할 시 코드

   mesh.uv = new Vector2[]
        {
            new Vector2(0f, 1f), new Vector2(1f,1f),
            new Vector2(0f, 0f), new Vector2(1f,0f)
        };

다음으로 normals(법선)이란 뜻을 찾아보니 버텍스에 수직을 향하는 방향

말그대로 빛을 받고 반사하는 방향을 가르키는거라고 합니다.

현재 평면 판넬을 만들어 Z축의 반대로 그림을 보여줄꺼니 코드는 이렇습니다.

  mesh.normals = new Vector3[]
        {
            new Vector3(0f,0f,-1f), new Vector3(0f,0f,-1f),
            new Vector3(0f,0f,-1f), new Vector3(0f,0f, -1f)
        };

Z축을 다 -1f 을 해줬습니다. 빛을 받는게 아님 반사하는 방향임을 기억해야합니다.

마지막으로 triangles 먼저 코드를 보겠습니다.

mesh.triangles = new int[]
        {
            0,1,2,   //  0 ----1
                     // |      |
                     // 2 ---- 3
            1,3,2
        };

인트 배열로 만들어서 옆에 사각형을 만들어 좀 더 이해를 도왔습니다.

따라가다 보면 CW(시계방향)으로 삼각형을 그립니다.

삼각형을 그려서 둘을 합쳐 사각형을 만들어야함으로 그렇게 하였습니다.

시계방향으로만 돌면 상관없습니다.

그 후 렌더러를 하는 형식입니다.

mf.mesh = mesh;

        MeshRenderer mr = go.AddComponent<MeshRenderer>();
        Material mat = new Material(Shader.Find("Standard"));
        mat.name = "M_Handmade";
        mat.mainTexture = Resources.Load<Texture2D>("Textures\\Character");

        mr.material = mat;
    }

렌더러 컴포지션을 불러오고 머테리얼을 만들어줍니다. 하지만 머테리얼은 기본적으로 매개변수가 필요합니다.

쉐이더를 만들어논게 없으므로 기본 쉐이더인 Standard를 입혀줍니다.

그리고 마지막으로 텍스쳐를 불러와 입혀줍니다. Resources 파일을 만들어줍니다. 파일명은 바껴선안됩니다.

모든 그림은 Texture2D을 필요로 합니다. 컴포지션을 불러오고 파일경로\\파일명" 해줍니다. .png .jpg는 빼줍니다.

그리고 마지막으로 mr MeshRenderer에 머테리얼에 입혀줍니다.

'수업 일기장' 카테고리의 다른 글

Untiy.7 Move, add, sound  (0) 2021.02.26
Unity.6 uv, 텍스쳐 Wrap mode  (0) 2021.02.26
Unity.4 Collider, Rigidbody  (0) 2021.02.24
Unity.3 기초 및 Prefabs  (0) 2021.02.24
Unity.2 UI/UX 및 버튼 이동  (0) 2021.02.24

+ Recent posts