본문 바로가기

프로그램/유니티 스크립트 소스

[유니티 스크립트 소스] 유니티 에디터에서 클라이더 그리기

728x90
반응형

유니티 에디터(Unity Editor)에서 메쉬(Mesh)에 있는 클라이더(Collider)는 메쉬가 있기 때문에 따로 클라이더의 모양이  바로 확인 됩니다.

메쉬가 없이 클라이더만 있을 경우, 에이터에서 그 게임 오브젝트를 선택해야만 클라이더가 보입니다.

유니티 에디터에서 작업 중에도 클라이더를 계속 보여야 작업하는데 효율적입니다.

그래서 OnDrawGizmos를 이용하여 작업 중에도 계속 보이게 하는 코드입니다.

 

코더제로 유니티 스크립트 소스 유니티 에디터에서 클라이더 그리기
그림. 유니티 에디터에서 클라이더 그리기

1 SphereCollider 그리기

using UnityEngine; 

[ExecuteInEditMode]
[RequireComponent(typeof(SphereCollider))] 
public class DrawSphereCollider : MonoBehaviour 
{ 
    public Color m_BodyColor = new Color(1, 0, 0, 0.5f); 
    public Color m_LineColor = Color.white; 
    private SphereCollider m_SphereCollider; 

    void Start() 
    { 
        m_SphereCollider = GetComponent<SphereCollider>(); 
    } 

    void OnDrawGizmos() 
    {         
        float radius = m_SphereCollider.radius; 

        Vector3 position = m_SphereCollider.center - transform.position; 

        Gizmos.matrix 
            = Matrix4x4.TRS(this.transform.TransformPoint(transform.position), 
            this.transform.rotation, this.transform.lossyScale); 

        Gizmos.color = m_BodyColor; 
        Gizmos.DrawSphere(position, radius); 
        Gizmos.color = m_LineColor; 
        Gizmos.DrawWireSphere(position, radius); 
    } 
}

 

2 BoxCollider 그리기

using UnityEngine; 

[ExecuteInEditMode]
[RequireComponent(typeof(BoxCollider))] 
public class DrawBoxCollider : MonoBehaviour 
{ 
    public Color m_BodyColor = new Color(0, 0, 1, 0.5f); 
    public Color m_LineColor = Color.white; 
    private BoxCollider m_BoxCollider; 

    void Start() 
    { 
        m_BoxCollider = GetComponent<BoxCollider>(); 
    } 

    void OnDrawGizmos() 
    { 
        Vector3 size = m_BoxCollider.size; 

        Vector3 position = m_BoxCollider.center - transform.position; 

        Gizmos.matrix 
            = Matrix4x4.TRS(this.transform.TransformPoint(transform.position), 
            this.transform.rotation, this.transform.lossyScale); 

        Gizmos.color = m_BodyColor; 
        Gizmos.DrawCube(position, size); 
        Gizmos.color = m_LineColor; 
        Gizmos.DrawWireCube(position, size); 
    } 
}

 

728x90
반응형