使用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就可以看到 动画都是重新播放的,而且不会出现卡帧的现象了。