unity

Unity扩展Inspector面板

被刻印的时光 ゝ 提交于 2019-12-03 14:58:40
using System.Collections; using System.Collections.Generic; using UnityEngine; #if UNITY_EDITOR using UnityEditor; #endif public class EditorTest : MonoBehaviour { // Use this for initialization void Start() { } // Update is called once per frame void Update() { } [ContextMenu("cnm")]//扩展inspector面板 通过邮件即可出现菜单 cnm void fucking() { } public void m_function() { } } [CustomEditor(typeof(EditorTest))]//typeof 括号里面就是我们要扩充的组件的名字,比如我们的脚本是EditorTest,那么我们是需要在这个脚本组件上面添加一个按钮,那么就括号里面填这个脚本名 public class configure:Editor { public override void OnInspectorGUI() { // base.OnInspectorGUI(); if (GUILayout

扩展Unity Inspector

别来无恙 提交于 2019-12-03 14:58:25
Unity Editor下,可以在不改变原有布局的情况下扩展Inspect的界面。 在继承了Editor的类中,有两种实现方式: 第一种 using UnityEditor; [CustomEditor(typeof(CustomClass))] public class CustomClassEditor : Editor { public override void OnInspectorGUI() { // 自定义代码 base.OnInspectorGUI(); // 自定义代码 } } 第二种 using UnityEditor; [CustomEditor(typeof(CustomClass))] public class CustomClassEditor : Editor { public override void OnInspectorGUI() { // 自定义代码 DrawDefaultInspector(); // 自定义代码 } } 当然,这两种方式对开发者自定义的组件的显示是没有问题的,因为自定义的组件本身的绘制方式就是利用的Editor类中的OnInspectorGUI方法。 Unity内置的一些组件,比如说AudioSource这个组件,有的开发者发现扩展了它以后,显示在Inspector中的样式跟默认的有很大区别。 代码: using

Unity Editor扩展编辑器Inspector界面

筅森魡賤 提交于 2019-12-03 14:57:41
[SerializeFild]//对私有变量进行序列化保存设置的值,使其可以在Inspector界面显示 首先扩展编辑器需要: using UnityEditor (1)Inspector界面编辑: //被扩展脚本 using UnityEngine; using System.Collections; public class Test : MonoBehaviour { [SerializeFild]//对私有变量进行序列化保存设置的值,使其可以在Inspector界面显示 [HideInInspector]//在Inspector界面隐藏 Private Sprite spt; Public Sprite Spt{ get{return spt;} set{spt = value;} } } //Editor脚本,可以放在Editor文件夹中(如果不放在Editor请加属性[ExecuteInEditMode]) Using UnityEditor; using UnityEngine; using UnityEngine.UI; //[ExecuteInEditMode] //在编辑器中运行 //[CanEditMultipleObjects]//可以对多个脚本进行设置,可以做多选操作 [CustomEditor(typeof(Test))]//标明是哪一个脚本类

Unity Behavior Tree Editor 行为树编辑器初级实现

泪湿孤枕 提交于 2019-12-03 14:56:48
Unity Behavior Tree Editor 行为树编辑器初级实现 编辑效果如下 编辑器脚本最好和行为树脚本分离。 需要存储的信息有:节点类型、子节点数组、(条件节点、行为节点需要特殊编辑) 数据存储在 NodeAsset 中,只需要包存一个根节点即可(从跟节点可以找到所有节点) [System.Serializable] public class NodeAsset : ScriptableObject { [SerializeField] public NodeValue nodeValue = null; } // 节点数据 [Serializable] public class NodeValue { // 根节点 public bool isRootNode = false; // 节点类型 public NodeType NodeType = NodeType.Select; // 子节点集合 public List<NodeValue> childNodeList = new List<NodeValue>(); // 叶节点脚本名 public string componentName = string.Empty; // 条件节点、行为节点描述(辅助查看) public string description = string.Empty; // 节点位置

【Unity Editor】实现给属性面板上拖拽赋值资源路径

醉酒当歌 提交于 2019-12-03 14:54:50
前言 需求是这样:从资产面板中拖拽一个文件,比如表格的xlsx吧,到某个属性面板的框框中。然后获取这个文件的路径。大概如下图所示: 之前在一个网站中看到类似的教程,后来没翻到在哪里了。总之实现过程如下: 正文 1、思路 首先肯定要绘制一个文本框,然后获得他的Rect; 然后如果鼠标在拖拽中,那么判定是否拖到这个文本框里面了。 如果拖进来的时候有选中文件,并且文件符合选中条件,那么就调用API获取路径进行填写。 2、代码 [CustomEditor(typeof(OrginExcelData), true)] [CanEditMultipleObjects] public class BaseExcelDataEditor : Editor { SerializedProperty Path; private void OnEnable() { Path = serializedObject.FindProperty("ExcelPath"); } public override void OnInspectorGUI() { //获得一个长500的框 mExcelPathRect = EditorGUILayout.GetControlRect(GUILayout.Width(500)); EditorGUI.TextField(mExcelPathRect, curPath);

unity 鼠标拖拽物体(完美版)

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-03 14:53:46
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ModelDrage : MonoBehaviour { private Camera cam;//发射射线的摄像机 private GameObject go;//射线碰撞的物体 public static string btnName;//射线碰撞物体的名字 private Vector3 screenSpace; private Vector3 offset; private bool isDrage = false; void Start() { cam = Camera.main; } void Update() { //整体初始位置 Ray ray = cam.ScreenPointToRay(Input.mousePosition); //从摄像机发出到点击坐标的射线 RaycastHit hitInfo; if(isDrage ==false) { if (Physics.Raycast(ray, out hitInfo)) { //划出射线,只有在scene视图中才能看到 Debug.DrawLine(ray.origin, hitInfo.point); go = hitInfo

unity3d 超好用的委托模式

烂漫一生 提交于 2019-12-03 14:53:09
原创 1.先写一个委托类,所有的委托都写在这个类里。 public class MyDelegate { public delegate void LogDelegate(string log); //定义 委托名为LogDelegate,带一个string参数的 委托类型 public static LogDelegate LogEvent; //声明委托对象,委托实例为LogEvent public static void OnLogEvent(string log) //可以直接 MyDelegate.LogEvent("")调用委托,这么写方便管理,还可以扩展这个方法; { if (LogEvent != null) { LogEvent(log); } } } 2.添加委托调用事件,调用委托。 void Start () { MyDelegate.LogEvent += MyLog; MyDelegate.LogEvent += MyLog2; MyDelegate.OnLogEvent("给你们这些小函数发回调消息了啊!"); } void MyLog(string log) { Debug.Log( "这种委托方法真是好用的不得了!我收到你的消息了:" + log ); } void MyLog2(string log) { Debug.Log(

【Unity】讲解如何在Unity的Inspector面板中用滑动条来控制变量的大小

你离开我真会死。 提交于 2019-12-03 14:52:32
首先,我们现在的需求是这样的,我定义了一个脚本,里面有一个int类型的变量,但是我想控制变量的大小在0到100之间,通过用滑动条的方式来控制。 其实这里的player HP 是我使用了unity自带的一个滑动条来读取的值 ‘玩家魔法值’在代码中的定义是playerMP,是我使用了自己自定义的一个方法来改的,看起来更直观 再次首先,我先说一下这个工程里一共有3个脚本,分别是: (1)ValueRangeExample.cs (2)MyRangeAttribute.cs (3)MyRangeAttributeDrawer.cs 哎哎哎,你的字怎么分开了啊,打错了吧!!! 哈,没有打错,故意空行的,脚本(1)ValueRangeExample.cs我们是吧它挂载到了主摄像机的身上 (2)MyRangeAttribute.cs 和 (3)MyRangeAttributeDrawer.cs 哪里都没有挂载,他们两个是对[MyRangeAttribute(0,100)]功能的编写,看下面代码就懂啦~ (1)ValueRangeExample.cs: using UnityEngine; using System.Collections; /// <summary> /// 脚本位置:挂载到主摄像机上 /// 脚本功能:通过一个滑动条来控制变量值的大小 /// 创建时间:2015.07.26 /

Unity Editor 基础篇(十):DragAndDrop编辑器下拖拽区域

浪尽此生 提交于 2019-12-03 14:52:02
转自:http://blog.csdn.net/LIQIANGEASTSUN/article/details/59753587 请点击链接查看原文,尊重楼主版权。 在Inspector 窗口上创建区域,向区域拖拽资源对象,获取到拖拽到区域的对象。 注意点: 绘制Box区域: GUIContent title = new GUIContent(string msg); var dragArea = GUILayoutUtility.GetRect(0f, 35f, GUILayout.ExpandWidth(true)); GUI.Box(dragArea, title); Scripts文件夹下新建脚本: public class Car : MonoBehaviour { [SerializeField] private Transform temp = null; } 然后在Editor文件夹下创建脚本,拖拽事件相关: using UnityEngine; using System.Collections; using UnityEditor; public class DragAreaGetObject : Editor { public static UnityEngine.Object GetOjbect(string meg = null) { Event aEvent

Unity编辑器——Inspector 面板扩展

ぃ、小莉子 提交于 2019-12-03 14:27:56
目录 将EditorGUI 扩展在 Inspector 面板上 EditorWindows 窗口 EditorWindows 下拉菜单 预览窗口 获取预览信息 本人代下CSDN资源,付费下载。不同积分的资源,付费的金额不同: 10积分之内的,每个书籍资源1.5元。 10→20积分之内的,每个资源2元。 20→30积分之内的,每个资源2.5元。 30→40积分之内的,每个资源3元。 40积分以上的,每个资源3.5元。 下载的资源可以是你发过来的CSDN下载的链接,也可以发资源的详情信息,然后我给你找,都可以。 像一般的CSDN的资源都是 10 或者 20 积分之内的,如果你不是经常下CSDN,特意去买一个会员,实在是太亏了(一个最低都要98元一个月,然后一个月之内只能下载30个资源)。有意者可以加扣扣: 2572722931(微信同样) 。我来帮你下载。童叟无欺,举报的人都生儿子没P眼的人。啪啪啪的时候猝死。 将EditorGUI 扩展在 Inspector 面板上 ● EditorGUI 和 GUI 的用法几乎完全一致,目前来说前者多用于 编辑器开发 ,后者多用于发布后 调试编辑器。 总之,它们都是起辅助作用的。 EditorGUI 提供的组件非常丰富,常用的绘制元素包括 文本、按钮、图片和滚动框等 。做一个好的编辑器,是离不开 EditorGUI 的。如图:我们将