Unity UGUI 中butto 的layouttransition使用 的Animation 怎么用

博客数据丢失,刚恢复一年前的备份!--QQ群:
当模型太多时。如果需要一个一个的创建AnimatorController其实很麻烦的。一个一个将动作拖入。创建AnimatorController什么的。很是烦躁。之前有人分享了5.x以前的代码创建方法。
但是在5.0之后。并不好用了。unity改变了原来的方式。所以就分享下。给需要的人。
using UnityE
using System.C
using UnityE
using UnityEditor.A//5.0改变 UnityEditorI并不能用了。
public class CreateAnimatorController : Editor
[MenuItem("ModelConfig/创建Controller")]
static void DoCreateAnimationAssets()
//创建Controller
AnimatorController animatorController = AnimatorController.CreateAnimatorControllerAtPath("Assets/animation.controller");
//得到它的Layer
AnimatorControllerLayer layer = animatorController.layers[0];
//将动画保存到 AnimatorController中
AddStateTransition("Assets/Art Resources/Character/moster-002/basic/moster-002@run.FBX", layer);
AddStateTransition("Assets/Art Resources/Character/moster-002/basic/moster-002@stand.FBX", layer);
AddStateTransition("Assets/Art Resources/Character/moster-002/basic/moster-002@born.FBX", layer);
private static void AddStateTransition(string path, AnimatorControllerLayer layer)
AnimatorStateMachine sm = layer.stateM
//根据动画文件读取它的AnimationClip对象
AnimationClip newClip = AssetDatabase.LoadAssetAtPath(path, typeof(AnimationClip)) as AnimationC
////取出动画名子 添加到state里面
AnimatorState state = sm.AddState(newClip.name);
state.motion = newC
Debug.Log(state.motion);
//把state添加在layer里面
AnimatorStateTransition trans = sm.AddAnyStateTransition(state);
1234567891011121314151617181920212223242526272829303132333435
using UnityEngine;using System.Collections;using UnityEditor;using UnityEditor.Animations;//5.0改变 UnityEditorI并不能用了。&public class CreateAnimatorController : Editor {&&&&[MenuItem("ModelConfig/创建Controller")]&&&&static void DoCreateAnimationAssets()&&&&{&&&&&&&&//创建Controller&&&&&&&&AnimatorController animatorController = AnimatorController.CreateAnimatorControllerAtPath("Assets/animation.controller");&&&&&&&&//得到它的Layer&&&&&&&&AnimatorControllerLayer layer = animatorController.layers[0];&&&&&&&&//将动画保存到 AnimatorController中&&&&&&&&AddStateTransition("Assets/Art Resources/Character/moster-002/basic/moster-002@run.FBX", layer);&&&&&&&&AddStateTransition("Assets/Art Resources/Character/moster-002/basic/moster-002@stand.FBX", layer);&&&&&&&&AddStateTransition("Assets/Art Resources/Character/moster-002/basic/moster-002@born.FBX", layer);&&&&}&&&&&private static void AddStateTransition(string path, AnimatorControllerLayer layer)&&&&{&&&&&&&&AnimatorStateMachine sm = layer.stateMachine;&&&&&&&&//根据动画文件读取它的AnimationClip对象&&&&&&&&AnimationClip newClip = AssetDatabase.LoadAssetAtPath(path, typeof(AnimationClip)) as AnimationClip;&&&&&&&&&&&&&&&&////取出动画名子 添加到state里面&&&&&&&&AnimatorState state = sm.AddState(newClip.name);&&&&&&&&//5.0改变&&&&&&&&state.motion = newClip;&&&&&&&&Debug.Log(state.motion);&&&&&&&&//把state添加在layer里面&&&&&&&&AnimatorStateTransition trans = sm.AddAnyStateTransition(state);&&&&}}
state.motion这样直接赋值的话。需要注意下动作fbx的设置。需要是如下的设置AnimationType设置为Generic通用类型。如下
转载请注明: &
or分享 (0)
本站所有内容如未标明转载的内容,均为原创内容。转载请注明来源!【图文】Unity3d5的UGUI简单介绍_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Unity3d5的UGUI简单介绍
&&ppt简单介绍了Unity3d软件自带的UGUI的一些组件
大小:1.70MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3ad6e484f30f439a-ua98).
重新安装浏览器,或使用别的浏览器Unity进阶技巧 - 动态创建UGUI
招聘信息:
前言项目中有功能需要在代码中动态创建UGUI对象,但是在网上搜索了很久都没有找到类似的教程,最后终于在官方文档中找到了方法,趁着记忆犹新,写下动态创建UGUI的方法,供需要的朋友参考你将学到什么?如何设置UI的缩放模式和尺寸如何添加UI动画效果如何使用Button的基本响应事件如何动态创建UGUI对象一、新建一个Test项目首先我们新建一个名为Test的项目来实践我们这次的内容,项目创建成功后,我们新建一个Button对象,如下图:新的UGUI全部都基于一个Canvas画布,如果你的场景里面没有Canvas,当你创建一个UI对象时,编辑器会自动帮你创建一个Canvas然后我们设置一下Cavans的缩放模式和尺寸,本例中我们以iPhone6的尺寸大小为准,我们选中Canvas,然后在其Canvas Scaler组件中,修改Ui Scale Mode为Scale With Screen Size,然后将分辨率设置为750*1334二、设置Button属性然后我们将Button的位置调整至屏幕的右上方,然后将字体大小放大,文本内容修改为点我(这边大小和文本内容可以根据自己的喜好来调整)三、动态创建UGUI对象的原理说明在开始下面的内容之前,先在这边讲解一下动态创建UGUI对象的原理,我们看看Unity官方文档的介绍说明:(懒得看到大段文字的朋友可以直接跳过这段,看后面的简单说明)Creating UI elements from scriptingIf you are creating a dynamic UI where UI elements appear, disappear, or change based on user actions or other actions in the game, you may need to make a script that instantiates new UI elements based on custom logic.Creating a prefab of the UI elementIn order to be able to easily instantiate UI elements dynamically, the first step is to create a prefab for the type of UI element that you want to be able to instantiate. Set up the UI element the way you want it to look in the Scene, and then drag the element into the Project View to make it into a prefab.For example, a prefab for a button could be a Game Object with a Image component and a Button component, and a child Game Object with a Text component. Your setup might be different depending on your needs.You might wonder why we don’t have a API methods to create the various types of controls, including visuals and everything. The reason is that there are an infinite number of way e.g. a button could be setup. Does it use an image, text, or both? Maybe even multiple images? What is the text font, color, font size, and alignment? What sprite or sprites should the image use? By letting you make a prefab and instantiate that, you can set it up exactly the way you want. And if you later want to change the look and feel of your UI you can just change the prefab and then it will be reflected in your UI, including the dynamically created UI.Instantiating the UI elementPrefabs of UI elements are instantiated as normal using the Instantiate method. When setting the parent of the instantiated UI element, it’s recommended to do it using the Transform.SetParent method with the worldPositionStays parameter set to false.Positioning the UI elementA UI Element is normally positioned using its Rect Transform. If the UI Element is a child of a Layout Group it will be automatically positioned and the positioning step can be skipped.When positioning a Rect Transform it’s useful to first determine it has or should have any stretching behavior or not. Stretching behavior happens when the anchorMin and anchorMax properties are not identical.For a non-stretching Rect Transform, the position is set most easily by setting the anchoredPosition and the sizeDelta properties. The anchoredPosition specifies the position of the pivot relative to the anchors. The sizeDelta is just the same as the size when there’s no stretching.For a stretching Rect Transform, it can be simpler to set the position using the offsetMin and offsetMax properties. The offsetMin property specifies the corner of the lower left corner of the rect relative to the lower left anchor. The offsetMax property specifies the corner of the upper right corner of the rect relative to the upper right anchor.Customizing the UI ElementIf you are instantiating multiple UI elements dynamically, it’s unlikely that you’ll want them all to look the same and do the same. Whether it’s buttons in a menu, items in an inventory, or something else, you’ll likely want the individual items to have different text or images and to do different things when interacted with.This is done by getting the various components and changing their properties. See the scripting reference for the Image and Text components, and for how to work with UnityEvents from scripting.动态创建UGUI对象的方法,简单来说就是将我们需要创建的UGUI对象制作成一个Prefab,然后使用Instantiate方法将其实例化,最后使用相关的API对其属性进行动态设置四、制作自定义的Text Prefab接下来我们就来创建自定义的Text Prefab,为动态创建做准备,首先我们会自定义一个如下图所示的Text:Text效果图我们来看看这个自定义的Text有哪些内容:字体的颜色是红色Text穿创建后会播放一段放大动画放大动画播放结束后,Text会向上移动一段距离移动结束后,Text就会消失掉1、设置MyText属性清楚了Text所需的内容后,我们首先来新建一个Text对象,并且命名为MyText新建Text对象然后我们重置MyText的Rect Transform,重置之后将其宽高分别设置为750和100,接着我们将MyText的字体大小设置为40,颜色设置为红色,然后将对其方式设置为居中:设置MyText宽高设置MyText字体属性2、为Text添加放大动画MyText的位置和字体属性我们已经设置好了,接下来我们就需要为MyText增加放大和上升两个动画效果了,首先我们选中MyText,然后打开Animation编辑器(Mac版可以使用?+6的快捷键打开)打开Animation编辑器然后在Animation编辑器中,点击Create按钮,新建一个动画新建一个动画当我们点击Create按钮后,编辑器会弹出一个对话框,我们需要指定新建的Animation的文件名和存放路径,这里我们第一个需要制作的动画是字体出现是的放大效果,所以我们将其命名为Appear,然后为了使资源方便管理,我们将所有的动画资源放入到_Animator的文件夹下面(需要大家自己创建文件夹,关于如何创建可以参见以前的教程)新建Animation对话框创建成功后,我们会发现除了我们自己创建的Appear文件,编辑器还自动创建了一个名为MyText的Animator Controller文件,如下图,根据文件类型名字就可以看出,这个文件是用来控制和管理我们Appear这类文件的,像我们需要实现的Text出现后播放放大动画,然后再播放上升动画,这一个过程和逻辑就是通过Animator Controller来实现的,后面我们会讲到Animator Controller文件接下来我们回到Animation编辑器里面,在这个里面我们可以对MyText对象的一个属性进行动态变化,从而形成动画效果,Unity对每个对象可以操控的属性变量都列举出来了,这里我们以Text对象来举例,我们点击Add Property按钮,会弹出下级菜单,我们在菜单中可以看到能够操作的属性变量有3大类:Rect Transform:该类是针对Rect Transform组件的属性进行变化,我们可以改变这些属性来实现对象大小的变化,或者位置的移动等Text:该类是针对Text组件的属性进行变化,我们可以改变这些属性来实现诸如字体颜色变化,字体显示与否等变化Animator:该类是对Animator组件的属性进行变化Add Property按钮为了实现MyText出现后放大的效果,我们添加Scale属性的变化,由于我们的UI其实是一个平面,对其大小能够产生视觉变化的只有X和Y轴的变化,然后我们在本例中,希望放大效果一共播放0.5秒,其中在0.25秒是MyText放大到1.5倍,所以我们在0.25秒的时候添加一个关键帧,然后将结束的关键帧拖拽至0.5秒处,如下图:添加关键帧接着我们选中0.25秒的关键帧,将该帧的Scale.x和Scale.y都设置为1.5设置缩放变化接着我们就可以点击Animation编辑器里面的播放按钮,来测试一下动画效果了动画效果放大的动画就做好了,接下里我们继续制作上升的动画效果3、为Text添加上升动画首先我们点击Appear按钮,然后选择Create New Clip...,为MyText添加一个新的动画文件:新建一个动画文件同样的在弹出的新建对话框中,我们将动画文件的名字命名为UpRight,存放在_Animator文件夹下面:新建对话框接着我们在UpRight动画中添加Anchored Position变化:添加Anchored Position变化上升动画在本例中,我们希望他能持续1秒,并且上升100个像素,所以我们选中结束的关键帧,在将其Position.y的值设置为100:Paste_Image.png然后我们就可以测试一下动画效果是否如我们所预期的:测试动画效果好啦,到这一步,我们已经为MyText添加了两个动画,分别是放大效果和上升效果,接下来我们就需要将两个动画衔接起来4、编排两个动画播放顺序要编排动画,就需要用到Animator Controller文件,我们双击打开MyText,会自动打开Animator编辑器:打开MyText文件Animator编辑器我们可以通过编辑器内容看到,现在的动画编排状态是MyText一开始就会进入Appear动作,所以要达到我们的预期效果,我们就只需要再添加一条衔接线,让MyText播完Appear后就进入UpRight状态,我们鼠标右键点击Appear状态,然后选择Make Transition,然后连接UpRight状态链接UpRight状态接下里我们就可以运行游戏看看动画效果的衔接是否正确了:测试衔接效果通过测试我们可以看到,现在MyText出现后会播放放大效果,然后再播放上升效果,但是有一个问题,他会一直循环播放上升效果,所以我们需要将动画的循环播放给关掉关闭循环播放这里我们需要将Appear和UpRight两个动画的循环都关掉,关掉之后我们再运行一下游戏,就会发现动画不会循环播放了5、添加移除脚本现在我们还存在最后一步,就是MyText上升动画播放完成后,我们需要将MyText删除掉,所以一下我们需要给MyText添加一个脚本,脚本命名为DestroyByTime,由于我们两个动画播放的总时间为1.5秒,所以我添加脚本让MyText生成后的1.5秒就自己销毁掉,下面是脚本的代码内容:完整的代码6、制作成Prefab做完上面这些工作后,我们便可将MyText制作成一个Prefab了,制作方法很简单,直接将MyText拖入到Prefabs文件夹就可以了,这里就不做详细介绍了五、实现点击Button动态创建一个MyText首先我们选中最开始创建的Button对象,然后滑动Inspector看到Button (Script)组件的相关属性,我们可以看到其中有一个On Click()属性,这里就是实现Button点击的响应事件的地方On Click()属性我们点击其中的+按钮,来新建一个响应事件,我们会看到响应事件有两个部分组成:响应对象执行动作新建一个响应事件上图中我们可以看,左边的Object就是我们需要指定响应的对象,这里的对象可以是我们场景中任意一个GameObject,然后左边的Function就是该对象需要执行的动作,我试着将Button拖入到Object之中:Button拖入到Object之中拖入之后,我们就可以看到Function里面有很多动作可以供我们选择,而且Unity还很温馨的给我们按照组件类型来分类了,关于每个动作的含义和用法,感兴趣的朋友可以自己去查阅官方文档,本例中,我们需要的动作是没有的,所以我们需要自己创建一个动作1、创建我们自己的响应动作首先我们给Button添加一个脚本,命名为MyButtonEvent,然后输入一下代码:完整的代码首先我们引入UnityEngine.UI命名空间然后我们声明一个公共变量myText,用来存放我们的MyText Prefab然后我们定义一个私有的tempText,用来临时保存生成的MyText实例然后我们定义了一个公共的方法createMyText,这里方法必须是Public的,这样才能出现在Function选项中方法里面我们首先使用Instantiate方法动态创建了一个MyText的对象,然后我们将他赋值给tempText由于UGUI对象只能处于Cavans下面才能被显示出来,所以我们需要将创建的MyText实例的父节点设置为Canvas,使用的是SetParent方法,该方法属于Transform组件然后我们再动态修改Text的文本内容写完代码,保存一下,然后回到编辑器2、选择响应动作此时我们选中Button对象,我们可以在On Click()中找到我们刚刚创建的createMyText动作(或者叫方法),如下图:createMyText动作我们选中它之后,我们可以设置传递给方法的参数,也就是我们MyText的文本内容,我们将内容设置为你好Unity!设置传递参数做完这个操作,然后我们再把创建中现有的MyText对象删除掉,运行一下游戏,点击Button就会弹出一个MyText对象了最终效果
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量10683点击量7052点击量6887点击量6600点击量6294点击量6209点击量6179点击量5965点击量5447
关注微信 每日推荐
扫一扫 浏览移动版
&2015 Chukong Technologies,Inc.
京公网安备89这几天体验了一把UGUI,用起来感觉棒棒哒。直接进入正题吧,如果要写一个全面的教程,估计还是要花点精力,如果要写好,就更不容易。那么,我还是以给自己做笔记为目的来写这篇文章吧,还是比较适合我这种小菜的哈哈。本文链接: 作者: 小明
下面真的进入正题了^^1.AnimationAnimation是以前的系统遗留下来的,而在我开始学习Unity的时候已经基本上很少用这个系统了,但是现在要做UI,而且是UGUI,那我就要重新学过。注意:在调整曲线之前,如果你设置的是位置动画,那么请务必先设置好锚点自适应。不然在你设置锚点后,动画播放的还是设置之前的位置。(这是比NGUI坑的地方,不过注意下就好了) 下面说说Animation的一些常用操作吧:1)曲线说到曲线,不得不说这一点还是NGUI的方便一点,有模板。UGUI得自己调,还总调不好。不过在充分利用一些功能后,也基本能够达到要求,不过稍费时一点。还是直接进入正题吧。比如我要改变Image的Color的a通道,也就是透明度。在选好Color后,会出现如图:在上图中,标记的序号1 是选中的游戏物体。2 是我们不需要的,要删掉它们,但是在改变比如scale的时候就不能删除不需要的属性了。3 是我们要改变的属性。4 我们选中它,编辑曲线。比如我们需要编辑一个呼吸动画(也就是NGUI里的PingPong)可以这样:1.调整最后的key的time,比如我调整为2秒一个周期。2.增加一个key,设置值为value=0,time=1。如图: 3.这个时候回出现如下图的情况,我原来就不之所措,但是后面才知道 只要拉伸右边与下边的滚动条就可以再次让整个曲线出现在我们面前。如图:4.这个时候两边的曲线是弯曲的,但是我们想要把它们变直(让动画的变化率不变),右键中间的key,选择Left Tangent里的Linear就能让左边曲线变直线,同样的方法使右边曲线也变直。如图:如果想要更复杂的效果,也是增加key,然后调整(通过其他的一些选项) 最后,该动画默认是循环播放的,如果你不需要就在Project面板中找到该动画把Loop Time勾掉就ok。 2.Animator通过上面的操作,我们有了一个Animator Controller,并且自动挂在Image上了。下面我们打开Animator,Window-&Animator。我们会看到如图:意思就是自动播放。但是我们经常不希望自动播放,那么可以右键新建一个空的状态,并设为默认。 下面该涉及到代码了!!我根据“需求”来阐述:需求1:&_&我不想再设置参数播放动画了我们想再代码中调用播放动画,怎么做呢?一般来说,会想到用参数,然后用SetBool,SetTrigger等,这样也行。不过还有更简单的,就是anim.Play函数,直接可以播放指定动画名,这样就不需要设置管参数什么的之类的多余的操作了。好,接着说。如果你在播放一个动画后,再次播放时发现,诶?怎么不动了?那是因为该动画没有退出播放,你再播放就不起作用了。解决办法是,在该动画上右键选择Make Transition连接到我们最开始新建的默认State(橘色的那个),这样在动画播放完后,就过渡到了橘色的默认状态了,当你再播放的时候也没有问题了。 需求2:O(∩_∩)我想让不同的状态在同一个状态机中同时播放 这时我们就可以发挥层的作用了(当然层的作用不止这个)。首先选中Layers(在左上角),会看到默认的是Base Layer。我们新建一个My Layer,有什么不同??答:1.名字不同 2.weight 不同 3.状态机不同。如图:我们应该注意到,红线的地方Base Layer是实心的,表示权重(weight)是1,而My Layer是空心的,表示权重为0。这个weight的意思就是执行百分之几的意思,如果为0,就是不执行,为1就是执行完整,为0.5,就是执行一半。现在我们想要完整执行,那么我们点击设设置按钮,设置weight为1。那么下面我们可以自行按照以上所述添加要重复播放的动画到新的My Layer层中就可以了。而调用的函数还是anim.Play,不过这次需要两个参数anim.Play(动画名,层的索引),层的索引通过anim.GetLayerIndex(层名)得到。有个问题是这么多字符串不好管理呀,那么可以建一个AnimatorConfig类来管理字符串,如图: 总结: 个人还是比较喜欢UGUI,毕竟是unity亲生的,相信后面会越来越好的
如果您想留下此文,您可以将其发送至您的邮箱(将同时以邮件内容&PDF形式发送)
相关文章推荐
(Ctrl+Enter提交) &&
已有0人在此发表见解
&在& 18:44收藏到了
&&在信息爆炸的时代,您的知识需要整理,沉淀,积累!Lai18为您提供一个简单实用的文章整理收藏工具,在这里您可以收藏对您有用的技术文章,自由分门别类,在整理的过程中,用心梳理自己的知识!相信,用不了多久,您收藏整理的文章将是您一生的知识宝库!
· 蜀ICP备号-1}

我要回帖

更多关于 vue transition使用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信