关于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 ...
随机推荐
- OAF_OAF控件系列4 - HGrid的实现(案列)
2014-06-02 Created By BaoXinjian
- RGB(FFFFFF)转255:255:255
NSString *color = model.display_color; long colorLong = strtoul([color cStringUsingEncoding:NSUTF8St ...
- Python2 列表 cmp() 方法
描述 Python2 列表 cmp() 方法用于比较两个列表,如果 L1 < L2 返回 -1, 如果 L1 == L2 返回 0, 如果 L1 > L2 返回 1. 语法 cmp() 方 ...
- Python min() 函数
描述 min() 方法返回给定参数的最小值,参数可以为序列. 语法 以下是 min() 方法的语法: min( x, y, z, .... ) 参数 x -- 数值表达式. y -- 数值表达式. z ...
- Maven install 报错: Failed to execute goalorg.apache.maven.plugins:maven-gpg-plugin:1.4:sign (sign-art
执行 Maven install 时报错: Failed to execute goalorg.apache.maven.plugins:maven-gpg-plugin:1.4:sign (sign ...
- docker 概念初识
1 docker 优势,一次创建或配置可以在任意时间.任意环境让应用正常的运行. 快速交付和部署,开发人员可以使用镜像快速构建一套标准的开发环境:开发完后测试和运维人员可以直接使用相同的环境来部署代码 ...
- 怎么把本地的文件放到esxi主机上
我们登录到esxi主机后 然后我们点击摘要-->存储器--->右键,浏览数据存储 创建文件夹,然后选择上传到此文件存储
- oracle递归层级查询 start with connect by prior
递归层级查询:start with connect by prior 以部门表作为解析 表结构:dept{id:'主键',name:'部门名称',parent_id:'父亲id'} select * ...
- 基于Unity3d 引擎的Android游戏优化
原文地址:http://blog.csdn.net/jixuguo/article/details/9018669 近期项目进入收尾阶段,之前对项目做了非常多优化,mesh合并 .降低DrawCall ...
- CSS中overflow:scroll怎么设置只上下滚动而不左右滚动
CSS中"overflow:scroll"默认是左右,上下都滚动.怎么设置只上下滚动而不左右滚动,下面有个不错的解决方法 CSS中"overflow:scroll&quo ...