유니티

Unity Mesh Renderer Size

민또배기 2022. 5. 16. 15:56
반응형

유니티 버전 : 2020.3.25f1

작업환경 : Mac (Monterey 12.3.1)

 

메시렌더러의 사이즈를 구해서 큐브를 그려주는 스크립트 입니다.

아래 사이트를 참고하였습니다.

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=blessthy&logNo=221332575172 

저는 에셋스토어의 무료 가구 에셋을 이용하여 확인해 봤습니다. 

 

MeshArea.cs

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

public class MeshArea : MonoBehaviour
{
    void OnDrawGizmosSelected()
    {
        Renderer rend = GetComponent<MeshRenderer>();
        Vector3 center = rend.bounds.center;
        Vector3 size = rend.bounds.size;
        Gizmos.color = Color.red;
        Gizmos.DrawCube(center, size);
    }
}

위 스크립트를 컴포넌트 추가하시면 선택된 오브젝트의 크기에 맞게 큐브가 그려집니다.

어느정도 비슷하게 맞기는 하지만 메쉬 표면의 크기를 구하고 싶었습니다. 그래서 아래처럼 추가해서 작성 했습니다.

mesh의 vertices들의 외적을 이용하여 면적을 구하는 스크립트입니다.

 

MeshArea.cs

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

public class MeshArea : MonoBehaviour
{
    void OnDrawGizmosSelected()
    {
        Renderer rend = GetComponent<MeshRenderer>();
        Vector3 center = rend.bounds.center;
        Vector3 size = rend.bounds.size;
        Gizmos.color = Color.red;
        //Gizmos.DrawCube(center, size);


        MeshCollider mc = GetComponent<MeshCollider>();
        Gizmos.DrawMesh(mc.sharedMesh,transform.position);

        float result = 0;
        Vector3[] vertices = mc.sharedMesh.vertices;
        for (int p = vertices.Length - 1, q = 0; q < vertices.Length; p = q++)
        {
            result += (Vector3.Cross(vertices[q], vertices[p])).magnitude;
        }
    }
}

 

왼쪽 : 큐브로 크기를 확인했을 때 / 오른쪽 : 메쉬로 크기를 확인했을 때

 

반응형