odyssey의 지형생성 방식에 대해 생각해봤는데..
미리 여러 타입의 지형을 생성해놓고,
(일단은) 런타임 중에 적당히 랜덤하게 붙이기로 했다.
지난번에 지형을 생성하는 기능을 만들었기는 한데..
그런데 문제는 스크립트로 지형을 생성하기 때문에
런타임 중에만 생성이 되고 에디터로 돌아오면 파괴되서 볼 수가 없다...
그래서 방법을 좀 찾아봤는데 에디터를 커스텀해서 에디터 상에서도 오브젝트를 생성할 수 있다고 한다!
커스텀 에디터
에디터를 커스터마이징해서 에디터 창을 띄우거나, 메뉴바를 만들거나, 프로퍼티를 추가하거나, 인스펙트를 수정하거나 등등.. 많은 작업을 할 수 있고,
작업속도도 올릴 수 있다! (고 한다..)
커스텀 에디터로 많은 작업을 할 수 있지만,
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에 실행할 함수 할당하고
게임 실행하고 테스트 했었는데..
이렇게 에디터 상에서도 실행시킬 수 있다는 걸 알게되었다!
스크립트 테스트나, 자동화 등에 활용하면 정말 생산속도를 올릴 수 있을 것 같다.
실제로 기업에서 에디터 툴을 개발하는 부서가 따로 있다던데..
사소하게나마 활용해 보니 잘 활용하면 개발에 도움이 될 것 같다.
강의 사이트에 에디터 프로그래밍 강의도 있고
앞으로 커스텀 에디터도 많이 잘 활용해 봐야겠다 ^___^
'odyssey' 카테고리의 다른 글
#9 odyssey 개발일지 : 동적 지형생성과 오브젝트 풀링 (0) | 2023.05.06 |
---|---|
#8 odyssey 개발일지 : 장애물 만들기 (0) | 2023.04.03 |
#6 odyssey 개발일지 : perline noise로 지형 생성 (0) | 2023.03.26 |
#5 odyssey 개발일지 : 베지어 곡선으로 곡선 지형 생성 (0) | 2023.03.17 |
#4 odyssey 개발일지 : 상태 패턴으로 리팩토링 하기 (0) | 2023.03.13 |