基于Unity的植被刷工具
最近接手的一个需求是给美术同学提供一个刷植被工具,类似Unity地形的Paint Details.
之所以没有选择Unity自己的地形工具,是因为策划需求中需要动态让植被消失和显示,另外大批量草的优化自己控制相对好处理一些,当然还有Unity地形广受诟病的性能问题.
这里把实现过程做个简单的记录.
内容包括:编辑器开发,植被shader, 生成优化,显隐
先上结果
编辑器长这样:
刷完草后的效果:
动态显示消失:
编辑器部分:
编辑器部分逻辑比较简单,掌握一些基础的EditorAPI,然后根据自己设计的面板去罗列代码就可以。
面板核心代码:
public class PaintDetailsEW : EditorWindow
{
//打开窗口
[MenuItem("Window/Paint Details %g")]
static void Open()
{
var window = (PaintDetailsEW) EditorWindow.GetWindowWithRect(typeof(PaintDetailsEW), new Rect(0, 0, 386,320), false, "Paint Detail");
window.Show();
Enable = true;
}
void OnInspectorUpdate()
{
Repaint();
}
void OnGUI()
{
CurrentSelect = Selection.activeTransform;
GUILayout.Space(20);
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
GUILayout.BeginVertical("box", GUILayout.Width(347));
GUILayout.BeginHorizontal();
GUILayout.Label("Add Assets", GUILayout.Width(125));
AddObject = (GameObject)EditorGUILayout.ObjectField("", AddObject, typeof(GameObject), true, GUILayout.Width(160));
if (GUILayout.Button("+", GUILayout.Width(40)))
{
for (int i