odyssey

#7 odyssey 개발일지 : 커스텀 에디터

san10 2023. 3. 30. 20:45

odyssey의 지형생성 방식에 대해 생각해봤는데..

미리 여러 타입의 지형을 생성해놓고,

(일단은) 런타임 중에 적당히 랜덤하게 붙이기로 했다.

 

https://san10.tistory.com/10

 

#5 odyssey 개발일지 : 베지어 곡선으로 곡선 지형 생성

지금까지는 임시로 곡선 지형을 만들었는데 이제는 베지어 곡선으로 지형을 만들려고 한다. 베지어 곡선이란? n개의 조절점과 선형 보간을 통해 얻을 수 있는 곡선으로, n-1차 베지어 곡선이라고

san10.tistory.com

지난번에 지형을 생성하는 기능을 만들었기는 한데..

그런데 문제는 스크립트로 지형을 생성하기 때문에

런타임 중에만 생성이 되고 에디터로 돌아오면 파괴되서 볼 수가 없다...

 

그래서 방법을 좀 찾아봤는데 에디터를 커스텀해서 에디터 상에서도 오브젝트를 생성할 수 있다고 한다!

 

 

커스텀 에디터

에디터를 커스터마이징해서 에디터 창을 띄우거나, 메뉴바를 만들거나, 프로퍼티를 추가하거나, 인스펙트를 수정하거나 등등.. 많은 작업을 할 수 있고,

작업속도도 올릴 수 있다! (고 한다..)

 

 

커스텀 에디터로 많은 작업을 할 수 있지만,

BezierMeshGenerator의 인스펙터창을 꾸며보려고 한다.

결과화면

 

유니티에서 구현

기능을 구현하기 위해, BezierMeshGeneratorEditor라는 스크립트를 생성하고,

using UnityEditor; 를 선언한다.

그리고 기존에 상속받던 MonoBehaviour 대신에 Editor를 상속받는다.

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(BezierMeshGenerator))]
public class BezierMeshGeneratorEditor : Editor
{

}

BezierMeshGenerator의 인스펙터창을 커스텀 할것이기에

[CustomEditor(typeof(BezierMeshGenerator))]도 추가해준다.

 

그리고 OnInspectorGUI()를 오버라이딩 한다.

public override void OnInspectorGUI()
{
    base.OnInspectorGUI(); // 기존의 GUI 유지
    BezierMeshGenerator bezierMeshGenerator = (BezierMeshGenerator)target;
    if (GUILayout.Button("MeshGenerate"))
    {
        bezierMeshGenerator.CreateBezierMesh();
    }
}

 

이렇게 작성해주고 에디터로 돌아가면..

MeshGenerate 버튼이 생겼다!

전/후

저 MeshGenerate 버튼을 누르면 지형이 생성된다!

 

 

지금까지 지형 생성할 때마다 canvas생성 - 버튼 생성 한뒤에

onclick에 실행할 함수 할당하고

게임 실행하고 테스트 했었는데..

이런식으로..

이렇게 에디터 상에서도 실행시킬 수 있다는 걸 알게되었다!

스크립트 테스트나, 자동화 등에 활용하면 정말 생산속도를 올릴 수 있을 것 같다.

 

실제로 기업에서 에디터 툴을 개발하는 부서가 따로 있다던데..

사소하게나마 활용해 보니 잘 활용하면 개발에 도움이 될 것 같다.

강의 사이트에 에디터 프로그래밍 강의도 있고

앞으로 커스텀 에디터도 많이 잘 활용해 봐야겠다 ^___^