您的位置:首页 > 移动开发 > Unity3D

unity基础开发----Unity3DuniSWF MovieClipBehaviour的使用

2013-04-08 17:24 375 查看
使用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就可以看到 动画都是重新播放的,而且不会出现卡帧的现象了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐