第六集链接:Unity编辑器扩展-第六集-创建窗口/批量填图_菌菌巧乐兹的博客-CSDN博客
一、本节目标+效果展示
1.我们有时候需要多次使用编辑窗口,但是每次一点执行,就关掉了,就很烦,所以我们希望,点击按钮,执行了操作,但不关闭
2.我们可能需要提示词,做错了的提示词,完成了的提示词
二、做一个应用按钮
回忆:
[MenuItem("基础扩展/批量赋值图片")]
static void Rename_SpriteName()
{
//1.对话框名称 2.创建按钮
ScriptableWizard.DisplayWizard<SetName_SpriteName>("统一创建按钮", "赋值图片" );
}
这个方法还可以有所改进:
[MenuItem("基础扩展/批量赋值图片")]
static void Rename_SpriteName()
{
//1.对话框名称 2.创建按钮 3.应用按钮
ScriptableWizard.DisplayWizard<SetName_SpriteName>("统一创建按钮", "确定", "赋值图片" );
}
备注:三个文字的顺序是1.对话框名称 2.创建按钮 3.应用按钮
第二个里面我改了一下创建按钮和应用按钮的名字
应用按钮
应用按钮的使用方法为:
void OnWizardOtherButton()
我们把之前在创建按钮里的方法,搬到应用按钮里
//把图片和图片的名称赋值给物体
public class SetName_SpriteName : ScriptableWizard
{
public List<GameObject> oldList = new List<GameObject>();
public List<Sprite> spriteList = new List<Sprite>();
private void OnWizardOtherButton()
{
for (int i = 0; i < oldList.Count; i++)
{
Undo.RecordObject(oldList[i], "赋值图片,改名称");
oldList[i].name = spriteList[i].name;
oldList[i].GetComponent<Image>().sprite = spriteList[i];
}
}
}
你会发现,和之前一样,然后对话框现在不关了,那关于创建按钮之前的方法,空着就行了,不要紧。
三、提示词
提示词有个两个别人写好的,直接用的参数:errorString、helpString
errorString长成
helpString长成
使用方法也很简单,直接赋值就可以用
helpString = "已改完,请确认";
另一个一样。
四、案例
我们希望:
备注,如果$这里看不懂,可以去瞅一眼,很简单
unity | 处理string常用的知识(持续更新)_unity转义字符_菌菌巧乐兹的博客-CSDN博客
1.没有物体,提示要补充物体
if (oldList.Count == 0)
{
errorString = $"物体有{oldList.Count}个,请补充";
}
2.如果有物体了,没有图片,提示补充图片
else if (spriteList.Count == 0)
{
errorString = $"图片有{spriteList.Count}个,请补充";
}
3.如果都有了,但是个数不一样,提示个数不一样
else if (oldList.Count != spriteList.Count)
{
errorString = $"物体有{oldList.Count}个,图片有{spriteList.Count}个,数目不同,请修改";
}
4.如果以上都对了,就执行代码,并且显示已经执行了
else
{
for (int i = 0; i < oldList.Count; i++)
{
Undo.RecordObject(oldList[i], "赋值图片,改名称");
oldList[i].name = spriteList[i].name;
oldList[i].GetComponent<Image>().sprite = spriteList[i];
}
//清空错误提示
errorString = "";
//提示已经完成
helpString = "已改完,请确认";
}
五、全部代码
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
//把图片和图片的名称赋值给物体
public class SetName_SpriteName : ScriptableWizard
{
public List<GameObject> oldList = new List<GameObject>();
public List<Sprite> spriteList = new List<Sprite>();
private void OnWizardOtherButton()
{
if (oldList.Count == 0)
{
errorString = $"物体有{oldList.Count}个,请补充";
}
else if (spriteList.Count == 0)
{
errorString = $"图片有{spriteList.Count}个,请补充";
}
else if (oldList.Count != spriteList.Count)
{
errorString = $"物体有{oldList.Count}个,图片有{spriteList.Count}个,数目不同,请修改";
}
else
{
for (int i = 0; i < oldList.Count; i++)
{
Undo.RecordObject(oldList[i], "赋值图片,改名称");
oldList[i].name = spriteList[i].name;
oldList[i].GetComponent<Image>().sprite = spriteList[i];
}
errorString = "";
helpString = "已改完,请确认";
}
}
}
public class Editor_Base
{
[MenuItem("基础扩展/批量赋值图片")]
static void Rename_SpriteName()
{
ScriptableWizard.DisplayWizard<SetName_SpriteName>("统一创建按钮", "确定", "赋值图片" );
}
}