博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简略的帧动画
阅读量:4983 次
发布时间:2019-06-12

本文共 2679 字,大约阅读时间需要 8 分钟。

本人也是个0基础的开发人员,这里仅仅是作为一个学习的总结,假设哪里的理解错了,欢迎纠正。

帧动画的实现能够用第三方的插件,相似2DToolkit。能够非常easy的实现帧动画,但有时还是不要太过于依赖第三方的插件。有时间还是得自己研究怎样实现,不能一直穿着别人的内裤啊~

这个是本次项目的终于效果图:

关于在Unity3d下怎样用代码生成面,这里雨松MOMO已经有相关的博文:

http://www.xuanyusong.com/archives/780

理解下一张Material的坐标系,这里用了网上找的一张图片:

每一个Material都有自己的这个坐标系。

而假设须要把一张纹理贴到一个面上,则须要把贴图上的UV坐标(UV坐标就是上面的坐标系)相应到面的每一个顶点上,如图(又是网上的图片):

比方有以下一张图片:

图片总宽高为:192x152,单张精灵的宽高为48x38;

假设我们仅仅想显示左上角的1张图片。代码例如以下

using UnityEngine;using System.Collections;public class ViewImage : MonoBehaviour {			public int widthCount , heightCount;		//图片的宽高比例//	public float width = 48,height = 38;		//素材贴图//	public Material	material;		//顶点数//	private int verticesCount = 4;			private Vector2 size;		private Mesh mesh;		public int frameIndex = 0;		private MeshRenderer meshRenderer;	// Use this for initialization	void Start () {		initFace();	}	/// 	/// 初始化一个面	/// 	private void initFace(){		//得到MeshFilter对象//		MeshFilter meshFilter = gameObject.GetComponent
(); if(meshFilter == null){ //为null时,自己主动加入// meshFilter = gameObject.AddComponent
(); meshRenderer = gameObject.AddComponent
(); meshRenderer.sharedMaterial = material; } //得到相应的网格对象// mesh = meshFilter.mesh; //三角形顶点的坐标数组// Vector3[] vertices = new Vector3[verticesCount]; //得到三角形的数量// int trianglesCount = verticesCount - 2; //三角形顶点数组// int[] triangles = new int[verticesCount *3]; float tmpWidth = 1.0f; float tmpHeight = 1.0f ; vertices[0] = new Vector3(0,0,0); vertices[1] = new Vector3(0,tmpHeight,0); vertices[2] = new Vector3(tmpWidth,0,0); vertices[3] = new Vector3(tmpWidth,tmpHeight,0); mesh.vertices = vertices; /* * * 假设以下的顶点连线看不明确,看这里 triangles[0] = 0; triangles[1] = 1; triangles[2] = 2; triangles[3] = 1; triangles[4] = 3; triangles[5] = 2; */ //起始三角形顶点// int start = 0; //结束三角形的顶点// int end = 2; for(int i = start; i

代码上面都有凝视,这里关于用图片的素材球的Shader说明下,一開始我用Transparent/Diffuse,可是在执行时。切换uv坐标时控制台打印了Shader wants normals, but the mesh  doesn't have them 这个消息。

Google下也不知道为什么,最后用Unlit/Transparent就没有打印了,所以哪位大神知道原因告诉我下~~

继续,如今已经能够从一张大贴图中显示当中的一张图片了。接下来整理成动画就是把这些帧图片整合在一起。在Update里头切换就KO了,代码例如以下:

//控制动画帧数//	public int[] aniArray;		void Update(){		if(Time.frameCount % 8 == 0){			int len = aniArray.Length;									int curIndex = aniArray[frameIndex];						setUVPosition(curIndex,mesh);						frameIndex ++;						frameIndex %= len;					}					}

以下是项目的一张截图,用红线圈起来的部分是动画帧的下标数组。

WidgetCount:大贴图x方向上有多少张图片。

HeightCount:大贴图y方向上有多少张图片。

Width:分隔的小贴图的宽度。

Height:f分隔的小贴图的高度。

FrameIndex:当前播放到第几帧的下标。

Ani Array:帧动画的下标集合数组。

O了。这篇事实上好早就在写,但一直没去完毕..今天光棍就顺便完毕掉~

转载于:https://www.cnblogs.com/ldxsuanfa/p/10748311.html

你可能感兴趣的文章
洛谷P1886 滑动窗口
查看>>
Shell编程(二)Bash中调用Python
查看>>
主动与被动监控 拓扑图组合图 自定义监控
查看>>
SQL总结(一)基本查询
查看>>
PDF分割--可脱离python环境执行,可传参数,可弹窗的PC端小工具
查看>>
cas-client-core单点登录排除不需要拦截的URL
查看>>
OCR技术浅探 : 文字定位和文本切割(2)
查看>>
jmeter集合点
查看>>
Java类代码块执行顺序
查看>>
克鲁斯卡尔(模板题)
查看>>
汉字转拼音
查看>>
Python中Web框架编写学习心得
查看>>
dataTable/dataSet转换成Json格式
查看>>
asp.net core模块学习
查看>>
MySQL远程连接不上的解决方法
查看>>
如何使用JMeter从文件中提取数据
查看>>
AndroidBase基础类文档
查看>>
使用delphi 开发多层应用(十九) ios通过soap 访问kbmmw服务器
查看>>
三大特征 封装 继承 多态
查看>>
Python 3 函数分类
查看>>