当前位置: 首页 > news >正文

做发票网站搜索引擎优化目标

做发票网站,搜索引擎优化目标,北京网站平台建设,我国现在疫情防控现状本专栏基础资源来自唐老狮和siki学院,仅作学习交流使用,不作任何商业用途,吃水不忘打井人,谨遵教诲 编辑器扩展内容实在是太多太多了(本篇就有五千字) 所以分为两个篇章而且只用一些常用api举例&#xff0c…

         本专栏基础资源来自唐老狮和siki学院,仅作学习交流使用,不作任何商业用途,吃水不忘打井人,谨遵教诲

         编辑器扩展内容实在是太多太多了(本篇就有五千字++)

        所以分为两个篇章而且只用一些常用api举例,更多的还是起到留下学习印象的作用

        就像引用类型的堆和栈一样,本文提供栈的作用,指向的内存堆为官方文档

什么是编辑器扩展

        Unity编辑器扩展是指通过编写自定义脚本和插件,利用Unity提供的API来增强和扩展Unity编辑器的功能,这些扩展可以显著提高开发效率和灵活性 

        前置知识:GUI 

        可能需要熟悉的知识: EditorGUI - Unity 脚本 API

     大部分的编辑器扩展脚本都需要写在Editor文件中,这样unity打包的时候,不会打包出去该文件

1.MenuItem类

作用:在unity未运行时 一键使用自定义静态函数

MenuItem - Unity 脚本 API --- MenuItem - Unity 脚本 API

1.创建菜单栏

 [MenuItem("扩展菜单名/一级菜单名/方法名任意")] 菜单级数任意

实现效果如下

引入命名空间,函数必须为静态函数

using UnityEngine;
public class T1 
{//在unity不同的地方一键执行静态函数[MenuItem("扩展菜单名/TestMethod/Function1")]public static void Function1(){Debug.Log("输出任意一句话");}
}

可以添加特殊标识符,在不同的窗口创建使用,而不只是通过菜单栏中去选择

类似这样

总结一下规则如下图

2.绑定快捷键规则 

3.在组件菜单中拓展自定义脚本

[AddComponentMenu("一级菜单/二级菜单/脚本名建议和实际脚本一致")] 菜单级数任意

众所周知 ,在unity中脚本就可以理解为组件

所以在菜单栏中的组件菜单中,是可以将自定义的脚本添加进去的

使用特性AddComponentMenu: 

//在组件菜单中添加 自定义脚本(组件)
[AddComponentMenu("一级菜单/二级菜单/脚本名")]
public class T2 : MonoBehaviour
{}

选中物品就可以添加了

4.为脚本添加使用自定义函数

[MenuItem("CONTEXT/脚本名/一级菜单名/函数名任意")]  菜单级数任意

//在组件菜单中添加 自定义脚本(组件)
[AddComponentMenu("一级菜单/二级菜单/脚本名")]
public class T2 : MonoBehaviour
{[MenuItem("CONTEXT/T2/一级菜单名/Function1")]public static void Function2() {Debug.Log("输出任意一句话");}
}

 2.EditorWindow 类

         官方文档:EditorWindow - Unity 脚本 API 

        继承了 EditorWindow类的编辑器脚本, 你可以在这个窗口中添加自定义方法,如下图演示将创建一个名为Name,有一个任意内容label的窗口

例如如下窗口

public class Window : EditorWindow
{[MenuItem("MyWindow/window1")]private static void MyWindow(){Window w =EditorWindow.GetWindow<Window>("Name");w.Show();}private void OnGUI() {GUILayout.Label("任意内容");}
}

3.EditorGUILayout类

        在具体绘制这一点,unity提供了一个新的类叫做EditorGUILayout,功能与GUILayout相似加入了自动布局功能

EditorGUILayout - Unity 脚本 API

        举例:每种元素都用常用api

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEditor;
using UnityEngine;public class Window : EditorWindow
{[MenuItem("MyWindow/window1")]private static void MyWindow(){Window w =EditorWindow.GetWindow<Window>("Name");w.Show();}//层级和标签int layer;string tag;//选择枚举enum E_AnyType{ a=1,b=2,c=4,d=8,//要将枚举中的变量定义为2的幂次方,原因是多选枚举时,是按照 或运算 将得出的结果记录下来//比如a=1,二进制为0001,b=2,二进制为0010,或运算后结果为0011 = 3 //如果不按此规则,a=1,b=2,c=3,当a|b之后,得到的结果就变成了c,而不是多选a和b}E_AnyType single;E_AnyType multiple;//字符串选择对应数组值int returnNum;string[] options = { "op1", "op2", "op3", "op4" };int[] result = { 1,2,3,4};//关联资源GameObject obj;int value;//整形输入框//折叠控件bool isHide;bool isGroupHide;//滑动条float slider;int intSlider;float min;float max;private void OnGUI() {EditorGUILayout.LabelField("页签");layer =EditorGUILayout.LayerField(layer);//return inttag =EditorGUILayout.TagField("标签");//return stingsingle = (E_AnyType)EditorGUILayout.EnumPopup("单选枚举",single);//return typeof(E_AnyType)multiple = (E_AnyType)EditorGUILayout.EnumFlagsField("多选枚举",multiple);returnNum = EditorGUILayout.IntPopup("字符串对应数组", returnNum, options, result);EditorGUILayout.LabelField(returnNum.ToString());EditorGUILayout.DropdownButton(new GUIContent("按钮"), FocusType.Passive);//return boolisHide = EditorGUILayout.Foldout(isHide,"折叠控件 bool包裹内容");if(isHide){obj = EditorGUILayout.ObjectField("关联资源对象框", obj, typeof(GameObject), true) as GameObject;value = EditorGUILayout.IntField("输入框", value);}isGroupHide = EditorGUILayout.BeginFoldoutHeaderGroup(isGroupHide,"折叠组控件 必须包括开始和结束");EditorGUILayout.EndFoldoutHeaderGroup();//开关和开关组类似于折叠控件 关键词:Toggleslider =EditorGUILayout.Slider("滑动条",slider,0,1);intSlider = EditorGUILayout.IntSlider("整型滑动条",intSlider,0,1);//双块滑动条EditorGUILayout.MinMaxSlider("双块",ref min,ref max,0,1);EditorGUILayout.Space(10);//间隔框//提示框EditorGUILayout.HelpBox("提示框",MessageType.Warning);//MessageType选择类型}
}

4.EditorGUIUtility类

       该类是 EditorGUI 的各种辅助程序

文档EditorGUIUtility - Unity 脚本 API

public class 资源加载和工具类 : EditorWindow
{[MenuItem("资源加载部分/openWindow")]private static void OpenWindow(){资源加载和工具类 l = EditorWindow.GetWindow<资源加载和工具类>("资源加载与工具示例");l.Show();}Texture texture;private void OnGUI() {//加载Editor Default Resources 文件夹下的资源 要求有后缀名texture = EditorGUIUtility.Load("test.jpg") as Texture;//有判空方法 EditorGUIUtility.LoadRequired() GUI.DrawTexture(new Rect(0,50,100,100),texture);//绘制//搜索框和选择资源if (EditorGUILayout.DropdownButton(new GUIContent("打开资源搜索框"), FocusType.Passive))EditorGUIUtility.ShowObjectPicker<Texture>(null,true,"",0);//搜索if(Event.current.commandName == "ObjectSelectorUpdated") {texture = EditorGUIUtility.GetObjectPickerObject() as Texture;//获取EditorGUIUtility.PingObject(texture);//高亮选中资源在Project中Debug.Log(texture.name);}//窗口事件传递 当SendEvent(e)执行后 会发出一个ExecuteCommand枚举类型 只需要检测这个类型 并且事件名相同即可接收if (EditorGUILayout.DropdownButton(new GUIContent("传递事件按钮"), FocusType.Passive)){Event e = EditorGUIUtility.CommandEvent("事件名");SendEvent(e);}//接收事件窗口 可以写在其他窗口之中 if (Event.current.type == EventType.ExecuteCommand && Event.current.commandName == "事件名") {Debug.Log("接收到了事件");}}
}

5.Selection类

        用于访问编辑器中的选择对象,这个类过于简单了,就不做演示,可以自行查看文档或看下面唐老师的注释

文档Selection - Unity 脚本 API

       #region 知识点一 获取当前选择的Object//获取当前在面板上选择的游戏物体Object//未选择则返回Null//选择多个则返回第一个选择的游戏物体//Selection.activeObject#endregion#region 知识点二 获取当前选择的GameObject//获取当前在面板上选择的游戏物体GameObject//未选择则返回Null//选择多个则返回第一个选择的游戏物体//Selection.activeGameObject#endregion#region 知识点三 获取当前选择的Transform//获取当前在面板上选择的游戏物体的Transform//未选择则返回Null//选择多个则返回第一个选择的游戏物体//Selection.activeTransform//只能获取到场景中的对象的Transform#endregion#region 知识点四 获取当前选择的所有Object//获取当前在面板上选择的物体数组//未选择则返回Null//Selection.objects #endregion#region 知识点五 获取当前选择的所有GameObject//获取当前在面板上选择的游戏物体或Project中预设体 GameObject数组//未选择则返回Null//Selection.gameObjects//可以遍历获取所有信息#endregion#region 知识点六 获取当前选择的所有Transform//获取当前在面板上选择的游戏物体Transform数组//未选择则返回Null//Selection.transforms//可以遍历获取所有信息#endregion}

6.Event类

        作用:检测Unity中的事件/输入,或者是 用于UnityGUI 布局/渲染事件  

        你如果将此类写在OnGUI之中并配合EditorWindow的话那么其所有的方法与属性都将与自定义窗口有关

文档Event - Unity 脚本 API

         由于api过多且简单,故不做全部演示

  private void OnGUI() {//有一个大类 Event.currentVector2 mousePostion = Event.current.mousePosition;Debug.Log(mousePostion);}

      

http://www.hrbkazy.com/news/21707.html

相关文章:

  • 做旅游视频网站线上营销模式有哪些
  • 网站建设做哪个科目如何做好市场推广
  • 政府网站开发用什么工具网页seo搜索引擎优化
  • 郑州专业公司网站制作公司登录百度
  • filetype ppt 网站建设企业培训平台
  • wordpress开启子域名多站五种常用的网站推广方法
  • 扬州做网站微博seo排名优化
  • 卓越网站建设的优点营销计划怎么写
  • 怎么做网站推广林芝地区智慧营销系统平台
  • 济南建立网站如何创建自己的卡网
  • 网站建设找谁做seo入门教程网盘
  • 如何引流与推广常州百度关键词优化
  • 建设淘宝优惠券网站seo伪原创工具
  • 做网站高手网络推广策划方案怎么写
  • 网站头像有啥做会清晰东莞网站建设优化诊断
  • 青海高端网站建设公司seo网络贸易网站推广
  • 免费页面网站制作进入百度首页
  • 培训机构前端优化网站排名解析推广
  • css3做的网站软文营销方案
  • 中国建筑查询平台seo 是什么
  • 订购网站开发价格直播发布会
  • 滁州医院网站建设费用站长之家统计
  • 阿里巴巴官网网站seo网站结构优化的方法
  • 免费网站seo诊断东莞网络营销全网推广
  • 做公司网站大概需要多少钱啊免费推广平台排行
  • 青海省高速公路建设管理局网站郑州网络优化实力乐云seo
  • 做网站不备案会怎样丁香人才网官方网站
  • 你知道吗信阳seo
  • 网站员工风采关键词工具
  • 网站做几级等保投放广告怎么投放