uniSWF能把Flash的素材像用AS3编程类似,只不过环境要在C#或者JS中编程。要是想创建一个类似Menu菜单或者像导航一样的菜单,在Unity中首先要选择摄像机,给摄像机添加MovieClipOverlayCameraBehaviour:
因为之后 MovieClipOverlayCameraBehaviour.instance中才包含stage对象的实例,然后需要选择相机的类型:
不然程序就会报错了。
然后我们就可以在程序中编写了,这个程序需要拖放的对象当然也是相机对象,要切记!动态载入和直接给Flash材质有区别需要找的对象放在swf路径的后面:
MovieClip minimap = new MovieClip("libufan/swf/UI2.swf:MCArea");
要想获得对象的子对象,可以采用getChildByName来获取:
playerArea = minimap.getChildByName("roundArea");
btn.getChildByName("txt")
当然要是想添加点击事件的话就和AS3中一样了,可以直接添加MouseEvent。下面是所有的程序,以备时间长了回来看看:
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 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("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();
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 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("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");
}
}
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using pumpkin.display;
using pumpkin.events;
using pumpkin.tweener;
using pumpkin.text;
public class L2 : MonoBehaviour {
private Stage stage;
private MovieClip minimap;
private MovieClip background;
private MovieClip playerArea;
private MovieClip btnContainer;
private Dictionary menus;
public float scaleRatio=0.5f;
public float angle=0f;
private delegate void Handler();
void Start () {
if(!MovieClipOverlayCameraBehaviour.instance)return;
stage=MovieClipOverlayCameraBehaviour.instance.stage;
background=new MovieClip("learnUniSwf/1/hud2.swf:Background");
[color=#008ef1]//背景全屏制作方法[/color]
background.x=-2;
background.y=-2;
background.scaleX=(stage.stageWidth+10)/background.width;
background.scaleY=(stage.stageHeight+10)/background.height;
stage.addChild(background);
minimap=new MovieClip("learnUniSwf/1/hud2.swf:Minimap");
playerArea=minimap.getChildByName("player");
minimap.scaleX=minimap.scaleY=scaleRatio;
minimap.x=stage.stageWidth-minimap.width/2*scaleRatio-20f;
minimap.y=minimap.height/2*scaleRatio+20f;
stage.addChild(minimap);
BuildButtons();
}
void Update () {
angle+=Time.deltaTime*12f;
//动画,模拟minimap 扫描
playerArea.rotation=angle;
}
void MenuData(){
menus=new Dictionary();
menus.Add("New Game",HandlerStart);
menus.Add("Continue",HandlerContinue);
menus.Add("Options",HandlerOptions);
menus.Add("Exit",HandlerExit);
}
void BuildButtons(){
MenuData();
btnContainer=new MovieClip("learnUniSwf/1/hud2.swf:SimpleContainer");
stage.addChild(btnContainer);
int i=0;
foreach(KeyValuePair keyvalue in menus){
MovieClip btn=new MovieClip("learnUniSwf/1/hud2.swf:SimpleButton");
btn.gotoAndStop(1);
btn.looping=false
//按钮子元素对Mouse 不触发事件,很关键,不然下文evt.target将指向Btn内的某元素
btn.mouseChildrenEnabled=false;
btn.y=i*(btn.height+10f);
btn.name=keyvalue.Key;
btn.getChildByName("txt").text=btn.name;
btnContainer.addChild(btn);
i++;
}
btnContainer.x=stage.stageWidth/2;
btnContainer.y=(stage.stageHeight-btnContainer.height)/2;
//对按钮父容器进行监听,通过事件的target引用找到按钮
btnContainer.addEventListener(MouseEvent.CLICK,ClickHandler);
btnContainer.addEventListener(MouseEvent.MOUSE_ENTER,OnEnter);
btnContainer.addEventListener(MouseEvent.MOUSE_LEAVE,OnLeave);
}
void HandlerStart(){
Debug.Log("handler start....");
}
void HandlerContinue(){
Debug.Log("handler continue....");
}
void HandlerOptions(){
Debug.Log("handler options....");
}
void HandlerExit(){
Debug.Log("handler exit....");
}
void ClickHandler(CEvent evt){
Handler h=menus[(evt.target as MovieClip).name];
if(h!=null){
h();
}
}
void OnEnter(CEvent evt){
(evt.target as MovieClip).gotoAndPlay(1);
}
void OnLeave(CEvent evt){
//(evt.target as MovieClip).gotoAndStop(1);
}
}