我们以此工具先来做一个简单的帧动画,在帧数框上单击一下,原来的0便会选中,此时输入数字1,表示对第1帧做动画,此时的录制按钮
以及系统的播放按钮
和动画编辑窗中的帧数线均会变红,表示现在处于记录模式,你所做的操作
会记录成动画的动作,如下图所示:
假设我们想使它在第一帧时,该按钮变大一点,我们就在Inspector中的Rect Transformr的Scale中操作,比如在x与y轴向上均增大到原来的1.05倍(因UI是在x-y平面上显示,故不需设置Z值),如下图所示:
同理,当第一帧设置完后,我们在帧数框中直接输入数字2,就可编辑第2帧的动画了,比如在x与y轴向上均增大到原来的1.1倍,再继续设置第3帧在x与y轴向上均增大到原来的1.15倍,假设我们现在就只做这3帧动画,已经完成了,那么我们点击一下那个处于红色晕光状态下的录制按钮
,结束录制,再保存一下场景,
就会发现在Project视图中_Animator/Button1下会增加4个动画文件Disabled、Highlighted、
Normal、Pressed(如果不保存将看不到这4个动画文件),这四个动画剪辑就是源于我们刚才的录制,虽然刚才我们只录制了一次,而系统会为我们自动产生这四个动画文件。
动画成功制作出来了,可运行起来看看效果了,但当我们运行起来时,就会发现那个按钮会自动无限次地播放那个动画,看起来就是不断地颤动,那么是什么原因呢?
我们在Project视图中,选中任意的一个动画剪辑比如Disabled,在其Inspector视图中可看到它的Loop Time属性是处于选中状态,意思是循环播放,那么我们把它去掉即可。
而这里,如果我们只去掉Disabled的Loop Time还是不行的,当然把这4个动画剪辑的Loop Time全去掉是能成功的,那么到底是那个剪辑在起作用呢?实际上是Normal,所以我们只需去掉Normal的Loop Time即可。其原因请看下列叙述。
我们先在Hierarchy视图中选中那个做了动画的Button,再单击系统菜单Window->Animation(注意不是Animator),就会打开刚才的动画编辑窗口:
单击其中的Normal框,会出现下拉选择:
从这下拉选择列表中可看出Normal前边有个勾,这说明我们刚才所做的动画是Normal。那么根据此原理,我们可分别做出鼠标经过该Button的Highlighted、该Button按下的Pressed、以及该Button失效的Disabled动画了。
3 Navigation
None:没有
Horizontal:水平 Vertical:垂直 Automatic:自动 Explicit:明确的
4 Visualize:显现 5 On Click()
在Button组件的下方有一个OnClick()选项,这就是Button控件处理事件的重要机制。 OnClick()意思为当该按钮被点击时所发生的事件,而此事件在UI中是委托机制,要理解这个机制,我们先做一些准备工作。
1) 建立脚本文件
假设此脚本文件被命名为ButtonEvent using UnityEngine;
using System.Collections;
public class ButtonEvent : MonoBehaviour { // Use this for initialization void Start () { }
// Update is called once per frame void Update () { } }
这是系统默认的文件内容,现在我们要把它应用于UI,故必须引入UI的命名空间,即脚本的首部增加一行:using UnityEngine.UI;。
假设我们单击一个按钮后,让系统在后台显示一句话:点击了Button!,那么我们可以在此脚本中增加一个方法,该方法为公共的public,假设方法名为DisplayInfo:
Public void DisplayInfo(){
Print(“点击了Button!”); }
此时整个脚本文件的内容如下: using UnityEngine;
using System.Collections; using UnityEngine.UI;
public class ButtonEvent : MonoBehaviour { // Use this for initialization void Start () { }
Public void DisplayInfo(){ Print(“点击了Button!”); }
// Update is called once per frame void Update () { } } 2) 在Hierarchy视图的Canvas中创建一个空对象,并假设命名为Event,并把上面的脚本作为组件挂到这个空对象上,那么这个对象是具有事件处理能力的object了。
3) 为某个按钮添加其事件处理的委托对象
我们在层级面板中选中要产生单击事件的按钮比如Button1,然后拖动其Inspector面板右边的滚动条,使其Button(Script)组件下的OnClick()显现出来:
此时其事件列表为空:List is Empty,我们单击其下的“+”按钮为其添加一个事件:
此时事件虽被添加了,但其委托的事件处理对象为空:None(Object),当然连事件处理对象都没有,其事件处理方法自然也就为空:No Function。(Runtime Only此项我们可先不管它,以后用到时再讲)
那么怎样委托事件处理对象与选择事件处理方法呢?
很简单,我们把层级面板中刚才建好的并已挂上了事件处理脚本的Event对象拖放到None(Object)框中即可,此时此框中显示的内容即为委托的此事件处理对象的名称了:Event,有了事件处理对象了,然后使用该对象的什么方法来处理事件呢?这还需我们给它指定,其方法是单击显示内容为No Function的那个事件方法框,会弹出菜单列表:
当我们的鼠标指向最后一项ButtonEvent时会继续展开,其中就有我们在脚本中编写的事件处理方法:DiaplayInfo(),选中它即可,这样就完成了事件的委托,当我们运行时,单击那个Button,就会在后台里打印出“点击了Button!”。
一个按钮可以有多个处理事件。
下面我们采用另一种显示信息的方式。
我们先在场景中的画布上增加一个Text控件,同时设置好相关的显示样式,然后在那个脚本中增加一个公共变量:public Text Txt_Info,回到场景视图中,在层级面板中选中挂有该脚本的对象Event,在其Inspector视图的ButtonEvent脚本组件里就会出现刚才增设的公共变量名:Txt_Info(脚本需保存且界面需刷新),我们可把增加的那个Text拖到此处即可为此变量赋值了,接下来我们就可通过脚本修改这个文本框控件的Text属性,让打印在后台的信息显示在这个文本框上了。其脚本文件内容如下:
using UnityEngine;
using System.Collections; using UnityEngine.UI;
public class ButtonEvent : MonoBehaviour { public Text Txt_Info; // Use this for initialization void Start () { } // Update is called once per frame void Update () { }
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Unity3D4.6UGUI开发设计及案例讲解 - 图文(4)在线全文阅读。
相关推荐: