Unity3D中播放序列帧动画
2015-02-22 11:42
459 查看
class FrameAnimation { private float fps = 10.0f; private Rect drawPos; private float time = 0; private int currentIndex = 0; public void DrawFrameAnimation(Texture[] frameTex) { int length = frameTex.Length; GUI.DrawTexture(drawPos, frameTex[currentIndex]); time += Time.deltaTime; if(time >= 1.0f/fps) { currentIndex++; time = 0; if(currentIndex>= length-1) { currentIndex = length - 1; } } } public FrameAnimation(Rect drawPos,float fps) { this.drawPos = drawPos; this.fps = fps; } } 在unity3D中新建一个脚本直接调用该类。 using UnityEngine; using System.Collections; public class DrawAnimation : MonoBehaviour { //private Resources resource; private Rect drawPos = new Rect(200,0,500,200); private Object[] texObject; public bool isCanDraw = false; private string path; Texture[] frameTex; private FrameAnimation frameAni; // Use this for initialization void Start () { LoadTexture(texObject,"FrameTex"); frameAni = new FrameAnimation( drawPos, 10); } void OnGUI() { if(GUILayout.Button("@#@")) { isCanDraw = true; } if(isCanDraw) { frameAni.DrawFrameAnimation(frameTex); } } void LoadTexture(Object[] texObj, string path) { texObj = Resources.LoadAll(path); frameTex = new Texture[texObj.Length]; texObj.CopyTo(frameTex, 0); } } [align=left]其实完全没有必要写成类,但是为了方便修改和最近在练习写代码的习惯,希望逐渐面向对象编程,希望可以提高代码的灵活性和复用性,所以就当是练习了![/align] [align=left]2013/9/26:[/align] [align=left]发现把所有图片一次性全部导入,加载相当的消耗资源,在PC上都会卡上一下,何况在移动平台上,特别有的时候图片稍微多的时候。[/align] [align=left]所以把代码稍作修改:[/align] [align=left]int currentIndex = 0;[/align] [align=left] Texture frameAniTex;[/align] [align=left] // Use this for initialization[/align] [align=left] void Start ()[/align] [align=left] {[/align] [align=left] [/align] [align=left] }[/align] [align=left] [/align] // Update is called once per frame [align=left] void FrameAnimation()[/align] [align=left] {[/align] [align=left] //isAnimating = true;[/align] frameAniTex = resources.GetTexture("BootAnim/" + currentIndex.ToString("D4")); [align=left] GUI.DrawTexture(frameAnimPos,frameAniTex);[/align] if (currentIndex < length - 1) [align=left] {[/align] [align=left] time += Time.deltaTime;[/align] if (time >= 1.0f / fps) [align=left] {[/align] [align=left] currentIndex++;[/align] [align=left] time = 0;[/align] if (currentIndex == length - 1) [align=left] {[/align] Resources.UnloadUnusedAssets(); ///加载完成后,即播放完毕后,卸载掉这些资源,好像跟播放序列帧动画扯远了,这是加载资源管理才对、、、、、 [align=left] }[/align] [align=left] }[/align] [align=left] }[/align] [align=left] }[/align] [align=left]这样做的好处是一张一张的加载资源,不像上面的那样一次性加载完,但是图片的数量即length的数量需要自己手动传入,因为无法根据代码动态获取。[/align] [align=left][/align] |
相关文章推荐
- Unity3D:粒子特效(Particle System)播放序列帧动画
- Unity3D:粒子特效(Particle System)播放序列帧动画
- Unity3D中播放序列帧动画
- 【Unity3D自学记录】关于Animation(动画)倒着播放方法
- Unity3D animation import issue | 模型导入,动画无法播放问题
- 关于unity3d播放flash动画,使用插件uniswf
- 在Unity3D中控制动画播放
- Unity3D控制动画播放
- [unity3d]汽车的开关门动画播放
- Unity3D Sprite2D 序列帧动画 干货总结
- Unity3D 游戏引擎之FBX模型的载入与人物行走动画的播放(十二)
- Unity3D控制动画播放
- Android序列帧播放动画(撞钟效果)
- Unity3D 游戏引擎之FBX模型的载入与人物行走动画的播放【转】
- [unity3d]汽车的开关门动画播放
- Unity3D中如何调用序列帧图片为动画
- Unity3D 游戏引擎之FBX模型的载入与人物行走动画的播放(十二)
- 在Unity3D中控制动画播放
- 在Unity3D中控制动画播放
- unity3d中animator和animation k动画注意点和问题 无法播放等等