unity有一个很强大的功能 就是我们自己可以创建窗口
像这样
文章图片
文章图片
文章图片
对你没有看错 这个就是自己添加的 我们可以从Tools等选项中打开 然后很容易的同时修改很多不同物体之间的参数
其中的每个字 每句话 按钮等都可以由我们来编辑
比如在一个稍微大的一点的游戏中 我们可能设置好多敌人
每种敌人出来模型的不同 我们还可能设置不同的血量 行走速度 攻击速度等等参数
如果我们这时需要同时改变二三十种敌人的参数 是很麻烦的
这时可以用我们的窗口来快捷操作
当然这只是一个最最简单的使用
制作过程 我推荐大家可以看下我的上一篇博客 对这个会很有帮助
我的上一篇博客(https://blog.csdn.net/weixin_44302602/article/details/103655488)
上篇博客中介绍到了Selection类和关于undo注册操作记录的知识 这里就不多说了
【unity编辑器扩展功能|unity编译器扩展功能(自定义窗口的添加)】然后呢 给大家把代码先弄出来
首先创建一个要改变的脚本(类)
public class Text : MonoBehaviour
{
public int hp ;
public int speed;
}
然后是创建窗体的脚本
注意:这个脚本要继承ScriptableWizard
public class Hp : ScriptableWizard
{
[MenuItem("Tools/CreateWizard")]//创建对话框
static void CreateWizard()
{
ScriptableWizard.DisplayWizard("统一修改", "Change value","Change");
//三个参数分别是标题名称 第一个按钮名称 第二个按钮名称
//第一个按钮点击后会关闭窗口第二个不会
}public intAddHp;
public intAddSpeed;
public GameObject set;
public Transform get;
private void OnEnable()
{
//当窗口被创建出来被调用的
AddHp = EditorPrefs.GetInt("AddHp");
AddSpeed = EditorPrefs.GetInt("AddSpeed");
//保存上次的数据第一次打开会和开始初始化一样的
}private void OnWizardCreate()
{
GameObject[] emenys = Selection.gameObjects;
//返回数组
foreach (var go in emenys)//遍历选中的物体
{
Text tt = go.GetComponent();
Undo.RecordObject(tt, "record");
//实现记录操作撤销
tt.hp += AddHp;
tt.speed += AddSpeed;
}
ShowNotification(new GUIContent(Selection.gameObjects.Length + "个游戏物体被修改了"));
//提示输出 语句(出现然后消失)}
//当字段被修改的时候调用
private void OnWizardUpdate()
{errorString = null;
//置空错误信息
helpString = null;
//置空提示信息
if(Selection.gameObjects.Length > 0)
{
helpString = "您当前选择了" + Selection.gameObjects.Length + "个物体";
}
else
{
errorString = "请至少选择一个物体";
}
EditorPrefs.SetInt("AddHp", AddHp);
EditorPrefs.SetInt("AddSpeed", AddSpeed);
//相对于运行过程中的PlayerPrefs保存相同的用法
}
//当选择的物体发生改变的时候触发该方法
private void OnSelectionChange()
{
OnWizardUpdate();
}
//第二个按钮的点击事件
private void OnWizardOtherButton()
{
OnWizardCreate();
}
}
我的注释可以说写的非常细致了 大家自己认真看一下应该不难理解
我们可以测试一下 可以做到同时修改好多物体的参数(前提挂载Text脚本)
推荐阅读
- Android开发|Android与Unity通信的SDK(一)
- Pico|Pico Neo 3 VR开发(Unity XR SDK)1
- VRTK|Unity结合HTC Vive开发之VRTK抓取物体
- VR学习资料|7个VR开发中容易混淆的概念(SteamVR、OpenVR、OpenXR……)
- unity笔记|【Unity】实现镜头虚化模糊效果(Blur)(camera模糊,UGUI模糊,FairyGUI模糊效果)
- Unity|【打一局王者荣耀掉星的时间,我制作了一款支持 重力感应 的 3D动态壁纸】
- Unity游戏开发学习路线和资源分享
- Unity|Unity 自学成长路线总结
- unity项目源代码|unity3d游戏3dRPG角色扮演完整项目源码分享