unity基础开发----Unity3D的uniSWF插件动态加载SWF UI资源

uniSWF能把Flash的素材像用AS3编程类似,只不过环境要在C#或者JS中编程。要是想创建一个类似Menu菜单或者像导航一样的菜单,在Unity中首先要选择摄像机,给摄像机添加MovieClipOverlayCameraBehaviour:

因为之后 MovieClipOverlayCameraBehaviour.instance中才包含stage对象的实例,然后需要选择相机的类型:

不然程序就会报错了。
然后我们就可以在程序中编写了,这个程序需要拖放的对象当然也是相机对象,要切记!动态载入和直接给Flash材质有区别需要找的对象放在swf路径的后面:

  1. MovieClip minimap = new MovieClip("libufan/swf/UI2.swf:MCArea");  
MovieClip minimap = new MovieClip("libufan/swf/UI2.swf:MCArea");


要想获得对象的子对象,可以采用getChildByName来获取:

  1. playerArea = minimap.getChildByName<MovieClip>("roundArea");  
  2. btn.getChildByName<TextField>("txt")  
playerArea = minimap.getChildByName<MovieClip>("roundArea");
btn.getChildByName<TextField>("txt")


当然要是想添加点击事件的话就和AS3中一样了,可以直接添加MouseEvent。下面是所有的程序,以备时间长了回来看看:

  1. using UnityEngine;  
  2. using System.Collections;  
  3. using System.Collections.Generic;  
  4. using pumpkin.display;  
  5. using pumpkin.events;  
  6. using pumpkin.tweener;  
  7. using pumpkin.text;  
  8.    
  9. public class Test1 : MonoBehaviour {  
  10.     private Stage stage;  
  11.     private MovieClip playerArea;  
  12.     private MovieClip btnContainer;  
  13.     private Dictionary<string,Handler> menus;  
  14.    
  15.     public float scaleRatio = 0.5f;  
  16.     public float angle = 0f;  
  17.     private delegate void Handler();  
  18.     void Start () {  
  19.         if(!MovieClipOverlayCameraBehaviour.instance)return;  
  20.         stage = MovieClipOverlayCameraBehaviour.instance.stage;  
  21.         MovieClip minimap = new MovieClip("libufan/swf/UI2.swf:MCArea");  
  22.         playerArea = minimap.getChildByName<MovieClip>("roundArea");  
  23.         minimap.scaleX = minimap.scaleY = scaleRatio;  
  24.         minimap.x = stage.stageWidth-minimap.width/2*scaleRatio-20f;  
  25.         minimap.y = minimap.height/2*scaleRatio+20f;  
  26.         stage.addChild(minimap);  
  27.    
  28.         BuildMenu();  
  29.     }  
  30.    
  31.     void Update () {  
  32.         angle += Time.deltaTime*12f;  
  33.         playerArea.rotation = angle;  
  34.     }  
  35.    
  36.     void MenuData()  
  37.     {  
  38.         menus = new Dictionary<string, Handler>();  
  39.         menus.Add("New Game", HandlerStart);  
  40.         menus.Add("Continue", HandlerStart);  
  41.         menus.Add("Options", HandlerStart);  
  42.         menus.Add("Exit",HandlerStart);  
  43.     }  
  44.    
  45.     void BuildMenu()  
  46.     {  
  47.         MenuData();  
  48.    
  49.         btnContainer = new MovieClip();  
  50.         stage.addChild(btnContainer);  
  51.    
  52.         int i=0;  
  53.         foreach(KeyValuePair<string,Handler> keyvalue in menus)  
  54.         {  
  55.             MovieClip btn = new MovieClip("libufan/swf/UI2.swf:MCTxt");  
  56.             btn.gotoAndStop(1);  
  57.             btn.looping = false;  
  58.             btn.mouseChildrenEnabled = false;  
  59.             btn.y = i*(btn.height+10f);  
  60.             btn.name = keyvalue.Key;  
  61.             //btn.getChildByName<TextField>("txt").text = btn.name;   
  62.             stage.addChild(btn);  
  63.             i++;  
  64.         }  
  65.    
  66.         btnContainer.x = stage.stageWidth*0.5f;  
  67.         btnContainer.y = (stage.stageHeight - btnContainer.height)*0.5f;  
  68.     }  
  69.    
  70.     void HandlerStart()  
  71.     {  
  72.         Debug.Log("start");  
  73.     }  
  74. }  
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using pumpkin.display;
using pumpkin.events;
using pumpkin.tweener;
using pumpkin.text;
 
public class Test1 : MonoBehaviour {
	private Stage stage;
	private MovieClip playerArea;
	private MovieClip btnContainer;
	private Dictionary<string,Handler> menus;
 
	public float scaleRatio = 0.5f;
	public float angle = 0f;
	private delegate void Handler();
	void Start () {
		if(!MovieClipOverlayCameraBehaviour.instance)return;
		stage = MovieClipOverlayCameraBehaviour.instance.stage;
		MovieClip minimap = new MovieClip("libufan/swf/UI2.swf:MCArea");
		playerArea = minimap.getChildByName<MovieClip>("roundArea");
		minimap.scaleX = minimap.scaleY = scaleRatio;
		minimap.x = stage.stageWidth-minimap.width/2*scaleRatio-20f;
		minimap.y = minimap.height/2*scaleRatio+20f;
		stage.addChild(minimap);
 
		BuildMenu();
	}
 
	void Update () {
		angle += Time.deltaTime*12f;
		playerArea.rotation = angle;
	}
 
	void MenuData()
	{
		menus = new Dictionary<string, Handler>();
		menus.Add("New Game", HandlerStart);
		menus.Add("Continue", HandlerStart);
		menus.Add("Options", HandlerStart);
		menus.Add("Exit",HandlerStart);
	}
 
	void BuildMenu()
	{
		MenuData();
 
		btnContainer = new MovieClip();
		stage.addChild(btnContainer);
 
		int i=0;
		foreach(KeyValuePair<string,Handler> keyvalue in menus)
		{
			MovieClip btn = new MovieClip("libufan/swf/UI2.swf:MCTxt");
			btn.gotoAndStop(1);
			btn.looping = false;
			btn.mouseChildrenEnabled = false;
			btn.y = i*(btn.height+10f);
			btn.name = keyvalue.Key;
			//btn.getChildByName<TextField>("txt").text = btn.name;
			stage.addChild(btn);
			i++;
		}
 
		btnContainer.x = stage.stageWidth*0.5f;
		btnContainer.y = (stage.stageHeight - btnContainer.height)*0.5f;
	}
 
	void HandlerStart()
	{
		Debug.Log("start");
	}
}


 

  1. using UnityEngine;  
  2. using System.Collections;  
  3. using System.Collections.Generic;  
  4. using pumpkin.display;  
  5. using pumpkin.events;  
  6. using pumpkin.tweener;  
  7. using pumpkin.text;  
  8.    
  9. public class L2 : MonoBehaviour {  
  10.     private Stage stage;  
  11.     private MovieClip minimap;  
  12.     private MovieClip background;  
  13.     private MovieClip playerArea;  
  14.     private MovieClip btnContainer;  
  15.     private Dictionary<string,Handler> menus;  
  16.    
  17.     public float scaleRatio=0.5f;  
  18.     public float angle=0f;  
  19.    
  20.     private delegate void Handler();  
  21.    
  22.     void Start () {  
  23.         if(!MovieClipOverlayCameraBehaviour.instance)return;  
  24.         stage=MovieClipOverlayCameraBehaviour.instance.stage;  
  25.    
  26.         background=new MovieClip("learnUniSwf/1/hud2.swf:Background");  
  27.         [color=#008ef1]//背景全屏制作方法[/color]   
  28.         background.x=-2;  
  29.         background.y=-2;  
  30.         background.scaleX=(stage.stageWidth+10)/background.width;  
  31.         background.scaleY=(stage.stageHeight+10)/background.height;  
  32.         stage.addChild(background);  
  33.    
  34.         minimap=new MovieClip("learnUniSwf/1/hud2.swf:Minimap");  
  35.         playerArea=minimap.getChildByName<MovieClip>("player");  
  36.         minimap.scaleX=minimap.scaleY=scaleRatio;  
  37.         minimap.x=stage.stageWidth-minimap.width/2*scaleRatio-20f;  
  38.         minimap.y=minimap.height/2*scaleRatio+20f;  
  39.         stage.addChild(minimap);  
  40.    
  41.         BuildButtons();  
  42.     }  
  43.    
  44.     void Update () {  
  45.         angle+=Time.deltaTime*12f;  
  46. //动画,模拟minimap 扫描   
  47.         playerArea.rotation=angle;  
  48.     }  
  49.    
  50.     void MenuData(){  
  51.         menus=new Dictionary<string, Handler>();  
  52.         menus.Add("New Game",HandlerStart);  
  53.         menus.Add("Continue",HandlerContinue);  
  54.         menus.Add("Options",HandlerOptions);  
  55.         menus.Add("Exit",HandlerExit);  
  56.     }  
  57.    
  58.     void BuildButtons(){  
  59.         MenuData();  
  60.    
  61.         btnContainer=new MovieClip("learnUniSwf/1/hud2.swf:SimpleContainer");  
  62.         stage.addChild(btnContainer);  
  63.    
  64.         int i=0;  
  65.         foreach(KeyValuePair<string,Handler> keyvalue in menus){  
  66.             MovieClip btn=new MovieClip("learnUniSwf/1/hud2.swf:SimpleButton");  
  67.             btn.gotoAndStop(1);  
  68.             btn.looping=false  
  69. //按钮子元素对Mouse 不触发事件,很关键,不然下文evt.target将指向Btn内的某元素   
  70.             btn.mouseChildrenEnabled=false;  
  71.             btn.y=i*(btn.height+10f);  
  72.             btn.name=keyvalue.Key;  
  73.             btn.getChildByName<TextField>("txt").text=btn.name;  
  74.             btnContainer.addChild(btn);  
  75.             i++;  
  76.         }  
  77.    
  78.         btnContainer.x=stage.stageWidth/2;  
  79.         btnContainer.y=(stage.stageHeight-btnContainer.height)/2;      
  80. //对按钮父容器进行监听,通过事件的target引用找到按钮   
  81.         btnContainer.addEventListener(MouseEvent.CLICK,ClickHandler);  
  82.         btnContainer.addEventListener(MouseEvent.MOUSE_ENTER,OnEnter);  
  83.         btnContainer.addEventListener(MouseEvent.MOUSE_LEAVE,OnLeave);  
  84.     }  
  85.    
  86.     void HandlerStart(){  
  87.         Debug.Log("handler start....");  
  88.     }  
  89.    
  90.     void HandlerContinue(){  
  91.         Debug.Log("handler continue....");  
  92.     }  
  93.    
  94.     void HandlerOptions(){  
  95.         Debug.Log("handler options....");  
  96.     }  
  97.    
  98.     void HandlerExit(){  
  99.         Debug.Log("handler exit....");      
  100.     }  
  101.    
  102.     void ClickHandler(CEvent evt){  
  103.         Handler h=menus[(evt.target as MovieClip).name];  
  104.         if(h!=null){  
  105.             h();  
  106.         }  
  107.     }  
  108.    
  109.     void OnEnter(CEvent evt){  
  110.         (evt.target as MovieClip).gotoAndPlay(1);      
  111.     }  
  112.    
  113.     void OnLeave(CEvent evt){  
  114.         //(evt.target as MovieClip).gotoAndStop(1);   
  115.     }  
  116.    
  117. }  
  118. 转载:http://blog.csdn.net/liang_704959721/article/details/8773572
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值