不使用Unity自带的Animation,在3D物体上播放帧动画

图片必须是可以整齐排列的 可以分割的完整的图片。

像这样

不能像这样:

也不能像这样,过于紧凑,不能完整切割


空项目,空场景,

场景中新建一个 Quad空物体

项目工程文件夹导入一个 含有 所有 帧动画 的图片。

项目工程文件夹中新建一个 空的材质,设置为Transparent透明,MainMaps的Albedo的图片设置为刚才导入的图片。

把这个材质 设置为 刚才 新建的 Quad的材质。

脚本挂载到一个新建的空物体上,把 那个 含有全部帧动画 的图片拖入 到这个脚本的tex上面,

把新建的Quad物体 拖入到 这个脚本的MeshFilter上。

代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class testAnima : MonoBehaviour
{public Texture2D tex;public MeshFilter MeshFilter;/// <summary>/// 当前帧/// </summary>private float _currentFrame = -1;/// <summary>/// 开始播放的时间/// </summary>private float _playStartTime;/// <summary>/// 行/// </summary>private int _tilesX = 10;/// <summary>/// 列/// </summary>private int _tilesY = 9;/// <summary>/// 动画有多少帧动画/// </summary>private int _framesCount = 90;/// <summary>/// 帧数,9,90,900进行测试,对应 1个Unity帧0.02s,/// 9,播放一个动画帧(90/9)*0.02s=0.2s/// 90,播放一个动画帧(90/90)*0.02s=0.02s/// 900,播放一个动画帧(90/900)*0.02s=0.002s/// </summary>private int _fps = 9;void Awake(){this._playStartTime = Time.time;}// Update is called once per framevoid Update(){if (MeshFilter == null){return;}if (_framesCount > 1){int frame = (int)((Time.time - _playStartTime) * _fps);frame = frame % _framesCount;this.SetFrame(frame);}}/// <summary>/// Sets the frame./// </summary>/// <param name="frame">Frame.</param>public void SetFrame(int frame){if (this._framesCount == 1){return;}float xUnitSize = 1.0f / this._tilesX;float yUnitSize = 1.0f / this._tilesY;int xIndex = frame % this._tilesX;int yIndex = frame / this._tilesX;yIndex = this._tilesY - yIndex - 1;Vector2[] uv = new Vector2[] {//正常朝向右/*new Vector2(xIndex * xUnitSize, yIndex * yUnitSize),//左下new Vector2(xIndex * xUnitSize, yIndex * yUnitSize) + new Vector2(xUnitSize, 0),//右下new Vector2(xIndex * xUnitSize, yIndex * yUnitSize) + new Vector2(0, yUnitSize),//左上new Vector2(xIndex * xUnitSize, yIndex * yUnitSize) + new Vector2(xUnitSize, yUnitSize),//右上*///正常朝向左,与原图 水平翻转new Vector2(xIndex * xUnitSize, yIndex * yUnitSize) + new Vector2(xUnitSize, 0),//右下new Vector2(xIndex * xUnitSize, yIndex * yUnitSize),//左下new Vector2(xIndex * xUnitSize, yIndex * yUnitSize) + new Vector2(xUnitSize, yUnitSize),//右上new Vector2(xIndex * xUnitSize, yIndex * yUnitSize) + new Vector2(0, yUnitSize),//左上};this.MeshFilter.mesh.uv = uv;this._currentFrame = frame;}
}

相关资料:

1.

[Unity]通过设置MeshRender的uv来显示图片的帧动画

2.项目分享

3.

[Unity]代码控制在3D物体上播放帧动画相关推荐

  1. unity 鼠标放置在3D物体上,显示物体名称

    做个记录,也方便自己以后查看,大家共同交流 源代码 using System.Collections; using System.Collections.Generic; using UnityEng ...

  2. unity代码控制物体的透明度总结

    以前测试过的成功实例,主图如下,默认材料可能不行,要新建一个拖到物体上,此例用的rendering mode是不透明模式即opaque,30的透明度(下面的例子用opaque原始透明度255就不行,所 ...

  3. Unity鼠标控制摄像机 围绕物体旋转

    Unity鼠标控制摄像机 围绕物体旋转 角度范围判定 // An highlighted block using UnityEngine;public class CameraCtrl : MonoB ...

  4. 关于Unity视频播放器插件 AVPro Video(二)3D物体上视频播放

    1.官网下载该插件或者我分享的链接: 链接:https://pan.baidu.com/s/1boGeJ8r 密码:mvbf 2.新建项目创建主要控制物体 3.创建对于视频播放在3D物体身上的材质 4 ...

  5. 【Unity入门】3.3D物体

    [Unity入门]3D物体     大家好,我是Lampard~~     欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一)物体移动旋转缩放 (1)物体移动     在上一篇文章 ...

  6. Unity TouchScripts实例 - 判断在物体上滑动

    使用PressGesture和ReleaseGesture实现检测是否有在物体上滑动 原理:触碰时触发PressGesture,离开时触发ReleaseGesture,比较触碰时和离开时位置的x值即可 ...

  7. unity 通过鼠标让3D物体在xyz三个轴移动

    工具 unity2018 vs2017 资源:要移动的模型 ,一个三维坐标轴 结果(暂时没找到办法放本地录屏,就先放图了): 通过鼠标拖动xyz三个轴,实现物体在三维空间的移动(可以是本地坐标也可以是 ...

  8. IOS重写unity Splash,消除黑屏,播放开场动画视频

    IOS重写unity Splash,消除黑屏,自定义开场动画视频,无需破解 此教程只使用于unity5.x系列,2018请看我新发的教程 因为自己使用的unity是免费版,无法去除splash,所以在 ...

  9. 通过 ruffle 使用 WebAssembly 在网页上播放 swf 动画

    flash 播放器将退出历史舞台,但是不能直接就抛弃 flash 动画,需要有顶替的方案.网上找到的就是用 webassembly 播放 swf 动画. github 上有个大神已经做出来了,而且经过 ...

最新文章

  1. 人类首张脑电波连接全图问世
  2. 【django】配置redis数据库【4】
  3. cocos creator基础-创建WX开放域遇到的问题
  4. 20151022作业
  5. 操作无法完成因为已经在mysqld.exe上打开_金蝶KIS软件操作技巧/百问百答(下)...
  6. python可以读取excel文档吗_python打开excel文件【python读取excel文件如何进行】
  7. POJ 1221 UNIMODAL PALINDROMIC DECOMPOSITIONS
  8. java new 数据类型_Java之基本数据类型
  9. 3.26 文字工具的使用 [原创Ps教程]
  10. windows下iexplore的命令行参数
  11. TOEFL wordlist 16
  12. 获取Linux系统的网卡ip地址
  13. linux ntfs格式u盘实现与挂载
  14. 轻量级服务器和ECS云服务器有什么区别?
  15. 嵌入式开发板设置IP
  16. image失败 安装scikit_安装scikit-image问题
  17. 指数基金投资指南读书笔记
  18. Python数据可视化工具matplotlib(五)-- 面积图、填图、饼图
  19. 精细化运营店铺,引导店铺走向正轨,带你玩转淘宝
  20. 热加工作业考研题目答案分享——Joining processes 4

热门文章

  1. c的关键字(commom)
  2. 程序员的梦想:一个人、一台笔记本、一家公司、年入一个亿!
  3. 5款用起来超级顺手的十六进制编辑器
  4. Win11右键菜单选项变成英文了怎么恢复回来?
  5. 华为鸿蒙安装酷喵,华为发布智慧屏S系列,首发全新鸿蒙OS
  6. VPF:Python中的硬件加速视频处理框架
  7. ArrayList 遍历ArrayList的3种方法,和删除的两种方法
  8. 惠普服务器DL360PG8键盘无法使用
  9. Python抓取网页中的动态序列化数据
  10. cortexM3启动简介