unity

Unity Editor 编辑器扩展 十三 自定义创建资源

夙愿已清 提交于 2019-11-26 02:14:53
目录 初级资源创建 中级资源创建 更自由的自定义资源创建 初级资源创建 Editor文件夹下创建脚本: using UnityEngine; using UnityEditor; public class CreateTest { [MenuItem ( "Assets/Create ExampleAssets" )] static void CreateExampleAssets () { var material = new Material (Shader.Find ( "Standard" )); ProjectWindowUtil.CreateAsset (material, "New Material.mat" ); } } 点击Assets--Create ExampleAssets 就会发现一个材质球被创建 中级资源创建 Editor文件夹下创建脚本: using UnityEngine; using UnityEditor; public class CreateMaterial { [MenuItem ( "Assets/Create Material" )] static void CreateExampleAssets () { var material = new Material (Shader.Find ( "Standard" )); var

Unity3D 自定义编辑器界面(Inspector)

≯℡__Kan透↙ 提交于 2019-11-26 02:14:11
今天看一个脚本,本想看看在 Inspector 界面的变量在脚本里的用途,然后查找变量名的时候怎么也找不到,自己也是惊讶。通过网上搜索才了解到原来 Inspector界面 是可以自己定义的。 当然自己定义,当然也需要写一个脚本来改的。可能是为了让界面整洁的目的。 首先,在头文件里需要添加 using UnityEditor; 新建一个文件夹 命名为 Editor 因为我们需要 using unityEditor ,而是用这个的脚本必须在名字为Editor 的文件夹下。在Editor 文件下创建一个C#新脚本 名字随意,我取名为 EditTest 假设原来物体挂的脚本名字是 Test using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { public int int_data; public float float_data; public Vector3 vector3_data; public bool bool_data; public Texture2D texture2d_data; public void PrintData() { Debug.Log("int_data=" + int_data)

Unity自定义委托方法 通过Inspector面板拖拽方法调用

て烟熏妆下的殇ゞ 提交于 2019-11-26 02:11:52
最近一直想要自己写一个Button类,发现Unity中Button的OnClick事件可以在属性面板拖拽方法,然而我自己定义的UnityAction和delegate无法显示在Inspector面板。 经过研究发现,应该使用UnityEvent类 这样子就可以在Inspector面板拖拽方法了 Invoke方法执行事件。 以上。 来源: CSDN 作者: 小姐姐蒙眼吗 链接: https://blog.csdn.net/x1017619024/article/details/81561418

Unity(八)Editor01自定义Inspector面板GUI参数,EasyButton为例

做~自己de王妃 提交于 2019-11-26 02:11:09
一:首先看一下EasyButton在Inspector面板暴露的参数信息 这些都是UnityEditor的功能 那么,如何自己来定义这些GUI呢?看下面 二:所需脚本,2个 打开EasyButton脚本后,shift+F12查找引用发现有个GUIEasyButtonInspector脚本在引用,这个脚本显然在Editor目录里 没错,CustomEditor分配了一个EasyButton,那么这里所写的Editor功能就会暴露在EasyButton脚本所挂的组件面板上 我们只需要 重写OnInspectorGUI()方法 即可 最后Refresh面板 三:小提示 初始对GUI的风格设定,也可以自己写个方法在OnInspectorGUI()调用 发现EasyButton里暴露的Public成员变量无法显示了。没明白怎么回事 PS:苟日新,日日新,日又新!学习,是一个积累的过程 来源: CSDN 作者: U龙战于野 链接: https://blog.csdn.net/LinZhonglong/article/details/79708932

Unity自定义Inspectors

好久不见. 提交于 2019-11-26 02:10:59
在Unity中,有时候需要自定义脚本在inspector中的显示,具体操作如下: 1.首先我们要在Editor文件夹下建立一个脚本,范例如下: using UnityEngine; using UnityEditor; using System.Collections; [CustomEditor ( typeof (MyPlayer))] [CanEditMultipleObjects] public class MyPlayerEditor : Editor { SerializedProperty damageProp; SerializedProperty armorProp; SerializedProperty gunProp; void OnEnable () { // Setup the SerializedProperties damageProp = serializedObject.FindProperty ( "damage" ); armorProp = serializedObject.FindProperty ( "armor" ); gunProp = serializedObject.FindProperty ( "gun" ); } public override void OnInspectorGUI () { // Update the

【unity实用技能】NGUI图片镜像

。_饼干妹妹 提交于 2019-11-26 02:00:33
NGUI做UI的话,有个功能很常用,比如: 这样的一个界面,如果大图的话一个图集都放不下几张,这时为了省资源,美术会把这个图切9宫。 不过这样依然很大,这时就会提出,如果这个图是左右相同的话,左右只出一半,另一半程序自己拼,上下相同只切上面,下面程序拼,上下左右相同的话出左上角,其余自己拼。 像这个就会这么出图 只出了左边。 自己拼不仅蛋疼,更重要的是拼出来的界面会有黑边,并且在适配不同界面的时候黑边总是会跑出来。 这时一般项目组就会拓展一下NGUI的UISprite,做一个镜像功能,直接填充出来右边。 像这样: 通过选择MirrowType来觉得是左右填充还是上下填充还是上下左右填充。 怎么实现呢,这里有点复杂,而且每个NGUI版本都不太一样,这里讲讲大概就直接发代码 1.首先是改Inspector文件(其实这个应该放最后) 加一个镜像选择框 2.再在UIBasicSprite.cs上加上对应的属性 3.接下来在UISprite.cs上改,现在OnFill里加上镜像逻辑,太长,截一部分: 这里的逻辑就是根据你选择的镜像模式,比如左右的话,就计算两次uv信息,画两个UIRect,这里要拓展一下NGUIMath.cs的逻辑。就是加上计算镜像的部分(这里自己看代码,不做解释了) 4.最后还是在UISprite.cs上改,在SImpleFill和SlicedFill上加上镜像的逻辑

unity项目发布webgl

ⅰ亾dé卋堺 提交于 2019-11-26 01:59:55
感觉WebGL是unity本身的一个坑,没事儿就会报错,然后发布失败 当然随着unity升级,这个坑还是在慢慢填平的 基本的解决方法就是在项目的Library文件夹下 删除webgl_cache文件夹,il2cpp_cache文件夹,以及il2cpp_cache 打头的那个文件 然后再发布 其实还有一点,就是发布过程中,会有一段时间,unity占用cpu几乎占满,占用内存非常高 所以发布时尽量关掉其它程序,尤其是关掉打开的其它unity程序,我在公司使用的电脑内存是8G,发布webgl时,unity占用内存最大能达到5G左右,如果再开一些其它的,就很有可能发布不成功,报错。 Windows 10 Unity版本:2018.2.6 随着unity的升级,这些问题的解决应该是越来越完善,也可以升级unity版本来解决webgl发布问题(这个只是可能有用),我的理念是尽量用新的版本 (Videoplayer和webgl一样,早期版本的问题很多) 来源: 51CTO 作者: lreach 链接: https://blog.51cto.com/shuxiayeshou/2447524

C#作业系统提示和故障排除

拜拜、爱过 提交于 2019-11-25 22:14:48
使用Unity C#作业系统时,请确保遵守以下内容: 不要从作业访问静态数据 从作业访问静态数据会绕过所有安全系统。如果您访问错误的数据,您可能会以意想不到的方式崩溃Unity。例如,访问 MonoBehaviour 可能会导致域重新加载崩溃。 注意 :由于存在这种风险,Unity的未来版本将阻止使用 静态分析 从作业进行全局变量访问。如果您确实访问作业中的静态数据,则应该期望您的代码在Unity的未来版本中中断。 刷新预定批次 如果希望作业开始执行,则可以使用 JobHandle.ScheduleBatchedJobs 刷新计划批处理。请注意,调用此方法会对性能产生负面影响。不刷新批处理会延迟调度,直到主线程等待结果。在所有其他情况下,使用 JobHandle.Complete 来启动执行过程。 注意 :在 实体组件系统 (ECS)中,将为您隐式刷新批处理,因此 JobHandle.ScheduleBatchedJobs 不需要调用。 不要尝试更新NativeContainer内容 由于缺少 ref返回 ,因此无法直接更改 NativeContainer 的内容。例如, nativeArray[0]++; 与 var temp = nativeArray[0]; temp++; 不更新值的 nativeArray 写入相同。 相反,您必须将索引中的数据复制到本地临时副本