Unity3D插件 Doozy UI 学习(三):UI Element

前言

之前写过一些关于DoozyUI的开发介绍,比较基础。后面用DoozyUI开发了一段时间,现在已经有了更深入的一些了解。这篇主要讲一下UI Elemenet这个脚本的使用。

 

正文

1、关于UI Element:

如下图所示,Doozy UI的UI Element主要有以下内容。

UI Element顾名思义,就是一个UI的最小元素。是作为打开、关闭的单位。通俗来讲,就是我们说的一个面板。

 

2、面板属性

hide @START :勾上后便在脚本Start时进行隐藏(移出屏幕外,并非Setactive false);

animate @START : 如果没有在开始时不隐藏,勾选这个则会播放进入动画;

disable when hidden :在隐藏时是否设置active 为 false ;

don't disable Canvas when hidden : 在隐藏时,不关闭Canvas。(不知道有啥用,一般都会让他关闭吧)

disable the Graphic Raycaster : 不启用 Graphic Raycaster组件,也就是取消点击事件。特殊面板可以选用。

auto hide : 自动隐藏,勾选后会让你填一个时间(秒)。在此时间后自动Hide;

custom start position : 设定开始位置。这个很重要!在Unity 2018 + ,由于新改了Prefab的框架,编辑Prefab是在一个单独的Scene中进行的。在使用代码实例化UI  Element,打开Prefab时,极容易发生面打开后的初始位置并不是0点,因此会造成动画的各种错位(发生这种情况的根本原因我还没有定位到)!此时就要用这个属性来修改初始位置,将其调整至正确地情况。

execute layout fix : 执行缩放适应?表示从来没用过。

auto selected button after show : 在展示时自动选个物体。注意,这个并不会触发点击事件。

 

3、动画

这里先看一个通常的动画设置:

一般来讲,用DoozyUI做UI动画的时候,可以先从模板中选一个接近的。通过Preset Category 和 Preset Name来选择,不过这个貌似无法在编辑模式下进行预览,只有运行的时候看。

当你选择了其中一个之后,点击Load Preset就会导入一个预设。(你也可以通过New Preset 和 Delete Preset来维护你的动画预设仓库)

然后这下面的Move 、Rotate、Scale、Fade分别代表移动、选择、缩放、渐变。里面的一些参数可以根据自己的需求进行调整。

最下面可以选择声音,这个就可以在编辑器下预览了。声音仓库在Doozy UI 的 Control Panel里(Alt + D)的UI Sounds子才菜单下:

 

4、关于层级

从目前看来,DoozyUI并没有有效的层级管理,尤其是在用代码进行控制的时候。

我们一般都调整Canvas的属性,但是DoozyUI并没有自动修改这个Order In Layer 的方法,似乎还要自己写代码来维护。一般在预制上就要调整好层级,或者写好代码来辅助修改。否则很容易出现某个面板打开了,但是被其他面板挡住了。

 

后记

我感觉Doozy UI是设计给那些不会写代码的的人使用的插件,可视化操作近乎完美,但是设计到和代码进行联动的部分就充满了尴尬……

不过好在开源还能救一下。

 

故障排除:

1、关于面板声音,点击后报错,不播放声音的问题。

我的问题是出在QUtils.CS 的38行的问题,提示的是他Method获取报空。看了一下,他应该是旧的获取Method的方法失败了导致的,我把这一段代码修改一下就可以用了:

        /// <summary>
        /// Plays an audioClip in the editor. This is useful for previewing a sound in the inspector.
        /// </summary>
        /// <param name="clip">The AudioClip you want to play</param>
        public static void PlayAudioClip(AudioClip clip)
        {
            if (clip == null) { return; }
            Assembly unityEditorAssembly = typeof(AudioImporter).Assembly;
            Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
            MethodInfo method = audioUtilClass.GetMethod("PlayClip", BindingFlags.Public | BindingFlags.Static);
            //MethodInfo method = audioUtilClass.GetMethod("PlayClip", BindingFlags.Static | BindingFlags.Public, null, new System.Type[] { typeof(AudioClip) }, null);
            method.Invoke(null, new object[] { clip, 0, false });
        }

原方法我我注释了。

同理,按照这个方式反射获取的方法应该都不太行,遇到了都得改一改。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值