odyssey의 지형생성 방식에 대해 생각해봤는데..
미리 여러 타입의 지형을 생성해놓고,
(일단은) 런타임 중에 적당히 랜덤하게 붙이기로 했다.
#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에 실행할 함수 할당하고
게임 실행하고 테스트 했었는데..
이렇게 에디터 상에서도 실행시킬 수 있다는 걸 알게되었다!
스크립트 테스트나, 자동화 등에 활용하면 정말 생산속도를 올릴 수 있을 것 같다.
실제로 기업에서 에디터 툴을 개발하는 부서가 따로 있다던데..
사소하게나마 활용해 보니 잘 활용하면 개발에 도움이 될 것 같다.
강의 사이트에 에디터 프로그래밍 강의도 있고
앞으로 커스텀 에디터도 많이 잘 활용해 봐야겠다 ^___^
'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 |