博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过拖拽prefab来存储相应的路径
阅读量:5019 次
发布时间:2019-06-12

本文共 2213 字,大约阅读时间需要 7 分钟。

 更新了一下,支持数组和嵌套数据结构。

 

1 using UnityEngine; 2 using System.Collections; 3 using UnityEditor; 4 using System.Reflection; 5  6 [CustomPropertyDrawer(typeof(ObjectToPathAttribute))] 7 public class ObjectToPathDrawer : PropertyDrawer 8 { 9 10     public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)11     {12         Object target = property.serializedObject.targetObject;13         ObjectToPathAttribute otpa = attribute as ObjectToPathAttribute;14         System.Type objType = otpa._objType;15 16         string path = property.stringValue;17         position.width = EditorGUIUtility.labelWidth * 2.0f / 3.0f;18 19         EditorGUI.LabelField(position, label);20         position.x += EditorGUIUtility.labelWidth * 2.0f / 3.0f;21 22         Object _obj = null;23         bool _foundObj = true;24         if (!string.IsNullOrEmpty(path))25         {26             _obj = AssetDatabase.LoadMainAssetAtPath(path);27             if (_obj == null)28             {29                 _foundObj = false;30             }31         }32         _obj = EditorGUI.ObjectField(position, _obj, objType, false);33         if (_obj != null)34         {35             path = AssetDatabase.GetAssetPath(_obj);36         }37         else38         {39             if (_foundObj)40             {41                 path = string.Empty;42             }43         }44         position.x += EditorGUIUtility.labelWidth * 2.0f / 3.0f;45         position.width = EditorGUIUtility.labelWidth;46         property.stringValue = EditorGUI.TextField(position, path);47     }48 }
ObjectToPathDrawer
1 using UnityEngine; 2 using System.Collections; 3  4 public class ObjectToPathAttribute : PropertyAttribute 5 { 6     public System.Type _objType; 7     public ObjectToPathAttribute(System.Type t) 8     { 9         _objType = t;10     }11 }
ObjectToPathAttribute
1 using UnityEngine;2 using System.Collections;3 4 public class TestClass : MonoBehaviour5 {6     [ObjectToPath(typeof(GameObject))]7     public string _prefabPath;8 }
TestClass

 

 

使用上面的代码可以通过拖拽一个prefab的方式把相应的路径直接存储到public string _itemPerfabPath里,省去键盘输入步骤。不支持场景中的GameObject的拖入。

截图如下:

当prefab为空的时候的截图如下:

转载于:https://www.cnblogs.com/mbysky/p/3955728.html

你可能感兴趣的文章
织梦DEDE多选项筛选_联动筛选功能的实现_二次开发
查看>>
12: xlrd 处理Excel文件
查看>>
前端面试题汇总(持续更新...)
查看>>
ES的Zen发现机制
查看>>
【hibernate】1、Hibernate的一个注解 @Transient
查看>>
HihoCoder 1877 - Approximate Matching
查看>>
Elastic Search 语法总结
查看>>
yii2 源码分析1从入口开始
查看>>
Leetcode 128. Longest Consecutive Sequence
查看>>
C# 线程手册 第五章 扩展多线程应用程序 - 什么是线程池
查看>>
考研路茫茫--单词情结 - HDU 2243(AC自动机+矩阵乘法)
查看>>
HTTP运行期与页面执行模型
查看>>
tableView优化方案
查看>>
近期思考(2019.07.20)
查看>>
android中不同版本兼容包的区别
查看>>
在 mvc4 WebApi 中 json 的 跨域访问
查看>>
敏捷开发文章读后感
查看>>
xposed获取context 的方法
查看>>
He who hesitates is Lost
查看>>
关于<form> autocomplete 属性
查看>>