Mesh?

3차원 오브젝트를 구성하는 덩어리!

 

< Mesh의 구성요소 >

- 버텍스 

- 폴리곤 정점 인덱스 : 삼각형의 정점 번호

- 정점 노멀벡터

- UV 좌표

 

< 게임오브젝트의 메시정보 >

- 인간형의 캐릭터와 같이 애니메이션이 작동하는 게임오브젝트인 경우 : skinnedMeshRenderer컴포넌트안에 메시가 포함

- 큐브와 같이 MeshRenderer를 사용하는 오브젝트인 경우: meshFilter컴포넌트에 포함


mesh로 이것도 할 수 있다! 

더보기

(1) 정점의 개수 및 각 꼭지점의 좌표

void GetMeshInfo()
{
  MeshFilter mf = GetComponent<MeshFilter>();
  Debug.Log($"정점의 개수 = {mf.mesh.vertexCount}");
  for (int i = 0; i < mf.mesh.vertexCount; i++)
  {
  // 지역좌표
  Debug.Log($"정점의 좌표 = {mf.mesh.vertices[i]}");
  // 전역좌표
  Vector3 worldPos = mf.mesh.vertices[i] + transform.position;
  }
}

 

(2) 오브젝트의 x,y,z축 길이

void GetMeshInfo()
    {
        MeshFilter mf = GetComponent<MeshFilter>();
        Debug.Log($"정점의 개수 = {mf.mesh.vertexCount}");
        for (int i = 0; i < mf.mesh.vertexCount; i++)
        {
            // 지역좌표
            Debug.Log($"정점의 좌표 = {mf.mesh.vertices[i]}");
            // 전역좌표
            Vector3 worldPos = mf.mesh.vertices[i] + transform.position;
            Debug.Log($"정점의 좌표 = {worldPos}");

            GameObject tmp = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            tmp.GetComponent<MeshRenderer>().material.color = Color.green;
            tmp.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);

            worldPos.x = transform.position.x + mf.mesh.vertices[i].x * transform.localScale.x;
            worldPos.y = transform.position.y + mf.mesh.vertices[i].y * transform.localScale.y;
            worldPos.z = transform.position.z + mf.mesh.vertices[i].z * transform.localScale.z;

            tmp.transform.position = worldPos;
        }
    }

 => (1)과 (2)를 사용해 콜라이더 박스를 자동화 할 수 있는 코드 작성 가능!

 

'Unity' 카테고리의 다른 글

상속 예제  (0) 2021.05.31
애니메이션 - StateMachineBehaviour  (0) 2021.05.28
애니메이션 - Legacy, Generic, Humanoid  (0) 2021.05.26
애니메이션  (0) 2021.05.26
싱글톤  (0) 2021.05.26

+ Recent posts