unity基础开发----Unity3DuniSWF MovieClipBehaviour的使用
使用uniSWF时,我们经常会这样使用 MovieClip minimap = new MovieClip("libufan/swf/UI2.swf:MCArea"); 来创建UI。但是在uniSWF可以让SWF的素材不仅仅活跃于二维的平面上,还可以通过给空的GameObject或者其他对象来添加MovieClipBehaviour使SWF可以再三维的空间中呈现,这样我们就可以轻松的实现动画。 但是性质还是2D的,不过我们可以选择用程序控制,让这个对象始终对着Camera。这样的我们对象就会变得非常有质感了。 如果大家想做这样的一个效果,就是开始的时候让这个动画在3D空间中播放,然后某一段时间后想让动画停在第一帧,然后重新播放Animation,就会发现有个很奇怪的问题。虽然MovieClipBehaviour里面有movieClip这个属性,但是即使我们不论怎么gotoAndStop(1),然后play(),会发现动画总是会卡一下,然后再继续播放。如果你和我一样想到了这样的效果,那就该让你头疼了。其实我也头疼的。不过在这里我还是公布一下自己的一个想法,虽然没有直接从根源解决,但是却解决了卡帧的情况,让动画可以很顺利的播放了。下面就是源码了:
using UnityEngine; using System.Collections; public class ObjectAwaysLookCamera : MonoBehaviour { private Vector3 cameraPostion; private MovieClipBehaviour ComMovieClipBehaviour; void Start () { ComMovieClipBehaviour = gameObject.GetComponent<MovieClipBehaviour>(); } void Update () { cameraPostion = Camera.main.transform.position; transform.LookAt(cameraPostion); } void OnDisable() { renderer.enabled = false; ComMovieClipBehaviour.drawScale = new Vector2(0.00f,0.00f); } void OnEnable() { ComMovieClipBehaviour = gameObject.GetComponent<MovieClipBehaviour>(); if (ComMovieClipBehaviour != null) { if (ComMovieClipBehaviour.movieClip != null) { ComMovieClipBehaviour.movieClip.gotoAndStop(1); StartCoroutine(WaitSeconds(0.1f)); } } } IEnumerator WaitSeconds(float time) { ComMovieClipBehaviour.movieClip.play(); yield return new WaitForSeconds(time); renderer.enabled = true; ComMovieClipBehaviour.drawScale = new Vector2(0.04f,0.04f); } } 以上的类可以直接创建一个C#文件,然后className要与我创建的一样哦(如果想换掉其实也是可以的,呵呵)!然后把这个类其实拖放到添加了MovieClipBehaviour的实例上面,在其他的类控制这个实例的gameObject.active就可以看到 动画都是重新播放的,而且不会出现卡帧的现象了。 转载:http://www.voidcn.com/article/p-muxwvecw-mv.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |