关于Unity中的帧动画组件的编写
一、帧动画
1: 美术准备好一个连续动作的离散图片;
2: 程序在准确的时间来切换这个图片;
3: 优点: 简单,速度快;
缺点:资源占用相对过大;
二、frame_anim组件编写
1: 代码里面强制要求加入Image组件;[RequireComponent(typeof(Image))]
2: 帧动画的参数:
(1) Sprite数组;
(2) 间隔时间;
(3) 是否循环播放;
(4) 是否在加载的时候播放;
3: 根据时间让Image组件显示正确的帧;
三 、实例步骤
1.创建一个Canvas
2.对Canvas进行初始化
3.创建一个Image的UI节点作为Canvas的子节点,名字叫bg,拖进背景图片到这个节点中。
4.把帧动画贴图放进一个anim的文件夹中,anim在Resources文件夹下
5.创建一个空节点叫anim,在canvas节点下面。
6.创建一个脚本frame_anim,挂载在anim节点下面。
7.frame_anim脚本内容
using UnityEngine;
using System.Collections;
using UnityEngine.UI; // 我们当前代码强制要求要加入一个Image组件,
// 如果没有Image组件,那么自动加上,如果有就使用;
// 如果你的代码要求这个节点必须挂某个组件,那么
// 使用RequireComponent
[RequireComponent(typeof(Image))] public class frame_anim : MonoBehaviour {
// 我们这个动画所需要的画面;
public Sprite[] sprite_frames;
// 帧动画的间隔时间
public float duration = 0.1f;
// 是否循环播放
public bool is_loop = false;
// 是否在加载的时候开始播放;
public bool play_onload = false; private float played_time;
private bool is_playing = false; private Image img;
// Use this for initialization
void Start () {
this.img = this.GetComponent<Image>();
if (this.play_onload) {
if (this.is_loop) {
this.play_loop();
}
else {
this.play_once();
}
}
} // 只播放一次
void play_once() {
if (this.sprite_frames.Length <= ) {
return;
} this.played_time = ;
this.is_playing = true;
this.is_loop = false;
} // 循环播放
void play_loop() {
if (this.sprite_frames.Length <= ) {
return;
}
this.played_time = ;
this.is_playing = true;
this.is_loop = true;
}
// 停止当前的动画播放
void stop_anim() {
this.is_playing = false;
}
// Update is called once per frame
void Update () {
if (this.is_playing == false) {
return;
} //
float dt = Time.deltaTime;
this.played_time += dt;
// 向下取整;
int index = (int)(this.played_time / this.duration);
if (this.is_loop == false) {
// 结束了
if (index >= this.sprite_frames.Length) { // 停止播放
this.is_playing = false;
this.played_time = ;
}
else {
this.img.sprite = this.sprite_frames[index];
}
}
else {
// 超过了范围,减掉一个周期
while (index >= this.sprite_frames.Length) {
this.played_time -= (this.duration * this.sprite_frames.Length);
index -= this.sprite_frames.Length;
} this.img.sprite = this.sprite_frames[index];
}
// end
}
}
8.在Inspetor视图的frame_anim脚本里面展开Sprite_frame,size设置为10,把10张帧图片拖进去
9.在Inspetor视图的frame_anim脚本下勾选play_onload,选择是否勾选is_loop循环播放,设置动画速率Duration,然后点击运行。
关于Unity中的帧动画组件的编写的更多相关文章
- 如何在unity中使用龙骨动画
龙骨 龙骨是Egret公司的一个用来做动画的软件,本文分享一下如何在Unity2D中使用龙骨导出的2D动画 导出动画 在龙骨中文件->导出,导出动画数据和纹理到Unity的项目中,如果打包了的话 ...
- 让 CXK 来教你实现游戏中的帧动画(上)
一款游戏除了基本功能之外,还需要给玩家更多视觉上的刺激,这个时候就需要用特效来装饰.本文就将介绍 Cocos Creator 的动画系统,除了标准的位移.旋转.缩放动画和序列帧动画以外,这套动画系统还 ...
- Android中的帧动画与补间动画的使用
前言 在日常开发中,我们有时候须要一些好看的动画效果,这时能够充分利用Android提供的这几种动画来实现. Android提供了3种类型的动画: 补间动画:补间动画能够应用于View,让你能够定义一 ...
- 转 [教程] Unity3D中角色的动画脚本的编写(二)
在上一篇,我们介绍了有关Animation这个类中的部分方法,我后来想了想,这么介绍也不是个办法(其实有些方法我自己也没用过),该介绍点实际的东西了,毕竟我们是要做东西出来的.那好 ...
- (转) [教程] Unity3D中角色的动画脚本的编写(一)
ps: 这两天研究unity3d,对动画处理特别迷糊,不知FBX导入以后,接下来应该怎么操作,看到这篇文章,感觉非常好,讲解的很详细. 已有好些天没写什么了,今天想起来该写点东西了.这次我所介绍的内容 ...
- (转) Unity3D中角色的动画脚本的编写(三)
在上一篇,我们具体的讲解了有关动画的融合,也提到了有关动画状态的权重问题.那么这次,我来以一个例子的形式来向大家讲解动画的叠加,或许会涉及到多方面的知识,我力求一次讲清.好了,我们开始吧! 首先我们必 ...
- 关于Unity中旧版动画系统的使用
Unity在5.X以后,有一个旧版的动画系统和新版的动画系统. 新版的动画系统是使用Unity动画编辑器来调的,调动画和控制动画 旧版的动画系统是用其他的第三方软件调好后导出到一个FBX文件里面,就是 ...
- 使用Unity中的Box Collider组件完成游戏场景中的碰撞检测功能
一.介绍 目的:通过Unity自带的组件完成游戏场景中的碰撞检测功能. 软件环境:Unity 2017.3.0f3 二.实现过程 1,在面板中点击Add Component按钮 2,添加Box Col ...
- Java乔晓松-android中的帧动画FrameByFrame
先看效果后上代码: 动画开始---- 动画切换的界面---- 动画播放完毕后的跳转界面----- 重要的方法: imageView.setBackgroundResource(R.anim.frame ...
随机推荐
- PS_Form个性化选择Block自动查询和查询条件排序实现(案例)
2014-06-01 BaoXinjian
- Python 列表 pop() 方法
描述 Python 列表 pop() 方法通过指定元素的索引值来移除列表中的某个元素(默认是最后一个元素),并且返回该元素的值,如果列表为空或者索引值超出范围会报一个异常. 语法 pop() 方法语法 ...
- Git教程Git多人协作开发
Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...
- angular.js ng-repeat动态插入删除dom节点
既然上面提到 angular.js 下无需用户直接操作dom ,而是在编译间断 dom 与 控制层model 实现了双向绑定,一方做出改变,另一方就会立即改变,那问题来了,我想插入一个文本框和按钮,并 ...
- 在linq to entities中无法使用自定义方法
来源: http://support.microsoft.com/kb/2588635/zh-tw (繁体)
- asp.net MVC学习的一些总结
起初认为视图,控制器,模型它们是完全没有耦合的,真正用了一段时间MVC发现错了. 但通过抽象让他们完全没有耦合,也不是不可能. 1.奇怪的连接地址 用MVC之前,一直认为页面必然访问某个文件.用了MV ...
- ModelSim之tcl自动化仿真
摘要: ModelSim的tcl最大的优势就在于它可以让整个仿真自动运行,免除每次进行各种用户界面控制操作的麻烦.用tcl就可以自动完成建库.映射库到物理目录.编译源代码.启动仿真器.运行仿真等一系列 ...
- 使用 JavaScript 实现对 PDF 的全文索引
Mozilla实验室最近已经收到了许多为一个项目做出的尝试,这一项目的野心令人印象深刻:在一个浏览器中仅仅使用Javascript来对PDF进行渲染.PDF文档的结构令人难以置信的复杂,因此要祝pdf ...
- HBase性能优化方法总结(二):写表操作
转自:http://www.cnblogs.com/panfeng412/archive/2012/03/08/hbase-performance-tuning-section2.html 本文主要是 ...
- VC++编程之道读书笔记
第二篇 缪误21:位图数据是按照红绿蓝顺序存储的 大家都知道位图的颜色是由红.绿.蓝三个分量构成的,但是位图颜色数据存储的方式则不是按照这个顺序存储的,而是按照蓝.绿.红的顺序存储的.并且对于真彩色位 ...