unity

unity自定义Scene窗口

两盒软妹~` 提交于 2019-12-03 14:12:49
unity自定义Scene窗口。Scene窗口添加按钮等,如下效果 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine.SceneManagement; using UnityEngine.Tilemaps; using UnityEditor.Experimental; using System.Reflection; using System; public class SceneViewEx : SceneView { [MenuItem("Test/SceneViewEx")] static void SceneViewExShow() { EditorWindow.GetWindow<SceneViewEx>().Show(); Texture2D texture2D = InnerLoadGeneratedIconOrNormalIcon("SceneviewFx"); } public override void OnEnable() { //getAttribute(); //OnEnableTest(); try {

Unity自定义摇杆实现

烈酒焚心 提交于 2019-12-03 14:09:01
Unity自定义摇杆 Unity利用自带的UGUI进行制作摇杆,并且利用事件来自定义注册具体的实现。 摇杆只要组成就是一个背景图片和一个中心的用来触摸的圆。 具体需要哪种事件,根据自己的逻辑来判断实现,不一定所有都需要。 文末会附演示工程文件。 摇杆的事件代码 public class JoyStick : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler, IEndDragHandler { public float outerCircleRadius = 50 ; //可以拖动的最大距离 Transform thumb; //触摸球 Vector2 thumb_start; Vector2 direction; //滑动方向 public Action<Vector2> onJoystickDownEvent; // 按下事件 public Action onJoystickUpEvent; // 抬起事件 public Action<Vector2> onJoystickDragEvent; // 滑动事件 public Action<Vector2> onJoystickDragEndEvent; // 滑动结束事件 void Start() { thumb = transform

Unity自定义UI

℡╲_俬逩灬. 提交于 2019-12-03 14:08:50
Unity自定义UI 在我们使用Unity开发一个项目的时候,往往会频繁的创建和修改UGUI的组件或其参数。由于我们所需要的功能往往与UGUI自动创建的组件不能够完全匹配,在每次创建UGUI组件的时候都要花时间来修改相应参数,故我们可以自定义我们自己的UI来减少相应的麻烦。 using UnityEditor; using UnityEngine; using UnityEngine.UI; /// <summary> /// 自定义UI组件 /// </summary> public class UICreate { //自定义Text [MenuItem("UI/Text", false, 1)] private static void MyCreateText() { if (GameObject.FindGameObjectWithTag("UI") == null) { Debug.LogError("没有Tag为UI的Canvas"); return; } GameObject UItext = new GameObject("MyText"); UItext.transform.parent=GameObject.FindGameObjectWithTag("UI").transform; UItext.transform.localPosition =

Unity自定义UI组件(二)函数图篇(下)

▼魔方 西西 提交于 2019-12-03 14:08:34
Unity自定义UI组件(二)函数图篇(下) 1.主要内容 1.1 针对 Unity自定义UI组件(一)函数篇(上) 的完善版本,功能的拓展 1.2 代码实现2D网格绘制 1.3 如何在自定义UI组件上添加文字 2.实现效果 3.设计过程 绘制原理: Unity中UI的现实也是基于三角面的绘制,三角面是绘制的最小单位,比如给出三个顶点,即可绘制出一个三角形。一个矩形的绘制是由两个三角面拼合而成,三角面三个顶点应该逆时针绘制,逆时针绘制是朝着屏幕可见,顺时针绘制是逆着屏幕可见(大家都应该遇到过模型只能看到一面的情况,比如Unity自带的Cube,当相机进入Cube中后,是看不见Cube里面的面的,就像传统CS,CF游戏一样,但是如果我们瞬时间绘制一次,逆时针绘制一次就是双面可见)。 逆时针三角面渲染顶点顺序:012 230 顺时针三角面渲染顶点顺序:021 320 在UI组件的绘制中,VertexHelp支持直接绘制矩形,只要调用VertexHelp.AddUIVertexQuad(Vertex[])传入由矩形的四个顶点构成的顶点数组,即可绘制,更多详细网格绘制原理,可参照官网Mesh或者期待后续的网格绘制基础篇。 函数图的绘制原理:其实曲线的绘制是由很多个小的矩形组合而成的,只要绘制的密集程度足够高,就可以看起来像是连续的曲线,其实本质上很多个矩形再由很多个三角面组合成的

Unity自定义窗体插件工具

前提是你 提交于 2019-12-03 14:08:21
模拟一个打包游戏工具吧。 但只有UI,并不具实际的打包游戏功能。目标只是写一个窗体工具,也可以是其它用途。 这个类一定要放在Asset下的任何一个Editor文件夹才生效。 using UnityEngine; using System.Collections; using UnityEditor; using System.Collections.Generic; //这个类只实例化一次后,将序列化 public class BuildInfos : ScriptableObject { public string [] buildModes = new string [] { "debug" , "relsease" }; public string [] buildSdks = new string [] { "无" , "百度" , "九游" , "360平台" , "当乐" }; public string appName = "gameName" ; public string appPackageName = "appPackageName" ; public string [] scenes = new string [] { "0.unity" , "1.unity" , "2.unity" , "3.unity" , "4.unity" }; public

[Unity3D]编辑器扩展之数组或List显示

独自空忆成欢 提交于 2019-12-03 14:05:32
  之前一直使用循环的方式创建,现在找到了一种更简便的方法,效果和Inspector面板上是一模一样的。省事了ヾ(Ő∀Ő๑)ノ太好惹! 效果如下: 源码如下: using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace XM.Editor { public class AssetBundleCreator : EditorWindow { [MenuItem( "Tools/Build Asset Bundle" )] public static void BuildAssetBundle () { var win = GetWindow<AssetBundleCreator>( "Build Asset Bundle" ); win.Show(); } [SerializeField] //必须要加 protected List<UnityEngine.Object> _assetLst = new List<UnityEngine.Object>(); //序列化对象 protected SerializedObject _serializedObject; //序列化属性 protected SerializedProperty _assetLstProperty;

Unity自定义创建脚本模板菜单

你。 提交于 2019-12-03 14:05:18
unity中我们可以在Project面板右键或通过Assets菜单创建脚本或是shader,unity为我们提供了C#,javascript脚本以及四个shader代码的模板,当创建这些脚本时实际上是复制这些模板并改变其类名或是shader名,我们可以在Unity的安装目录下找到这些代码模板文件:D:\Program Files\Unity\Editor\Data\Resources\ScriptTemplates。 我们可以自定义自己的文件模板,然后写脚本创建右键菜单,这样在Assets菜单中右键Create时可以创建自己的模板脚本。 注意将自己的模板文件放在Assets文件夹下任意位置的Editor文件夹下。这里创建c#脚本的模板名为:EventCSClass。 代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.IO; using UnityEditor.ProjectWindowCallback; using System.Text.RegularExpressions; using System; using System.Text; //这是一个编辑器类

Unity3D自定义脚本模板

北慕城南 提交于 2019-12-03 14:05:02
啥也不说直接上代码 /******************************************************************* * 文件名: ScriptTemplateEditor.cs * 时 间: 9/9/2015 * 作 者: lzh * 公 司: CompanyName * 项目名: ProjectName * 描 述: 自定义脚本模板 * 根据自己的需求,将这个脚本放到项目的Editor目录中即可。 *******************************************************************/ using UnityEngine ; using UnityEditor ; using System .Text ; public class ScriptTemplateEditor : UnityEditor .AssetModificationProcessor { static string AuthorName = "lzh" ; // 可自定义 static string CompanyName = "CompanyName" ; // 可自定义 static string ProjectName = "ProjectName" ; // 可自定义 public static void

Unity定制,将属性暴露在Inspector面板上

痞子三分冷 提交于 2019-12-03 14:03:38
孙广东 2015、7、12 Unity的很多编辑器功能都是通过特性Attribute实现。 那么我们要自己扩展Inspector也是要自己写Attribute。 先说说为什么要这样做? 为了编写面向对象程序,封装特性 更优雅。下面的脚本使 属性 (即有 getter/setter 的成员) 的内容可以在Unity的Inspector上显示。 这样就可以保密类的 字段,并限制所有的外部访问,只能通过 属性 访问, 看看代码吧! using System; [AttributeUsage(AttributeTargets.Property)] public class ExposePropertyAttribute : Attribute {} 在 "Assets/Editor" 的脚本 using UnityEditor; using UnityEngine; using System; using System.Collections; using System.Collections.Generic; using System.Reflection; public static class ExposeProperties { public static void Expose(PropertyField[] properties) { var emptyOptions =

Unity利用CustomEditor扩展Inspector

风格不统一 提交于 2019-12-03 14:03:18
在Unity中,当我们在Hierarchy或者Project面板中选择一个对象是,Inspector面板中会显示此对象的属性。很多时候,编写Unity工具的时候都需要扩展一下脚本在Inspector上的显示属性,添加一些按钮或者显示信息。 这时候就需要用到CustomEditor属性了。 1、创建一个ExampleEditor脚本,在类上添加[CustomEditor(typeof(T))]属性,重写OnInspectorGUI方法,用于扩展Inspector。 using UnityEditor; using UnityEngine; [CustomEditor(typeof(Example))] public class ExampleEditor : Editor { public override void OnInspectorGUI() { base.OnInspectorGUI(); Example _example = target as Example; if (GUILayout.Button("执行Example方法")) { _example.LogError(); } //扩展Inspector } } target就是你所添加的类型T,需要强转为你需要的类型。其他的做法与OGUI类似。 2、创建Example脚本,继承MonoBehaviour