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

Unity3D的uniSWF插件动态加载SWF UI资源

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

Unity3D的uniSWF插件动态加载SWF UI资源

不然程序就会报错了。

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

1

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

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

1

playerArea = minimap.getChildByName<MovieClip>("roundArea");

2

btn.getChildByName<TextField>("txt")

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

01

using UnityEngine;

02

using System.Collections;

03

using System.Collections.Generic;

04

using pumpkin.display;

05

using pumpkin.events;

06

using pumpkin.tweener;

07

using pumpkin.text;

08

09

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

//Unity3D教程手册:www.unitymanual.com

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

//Unity3D教程手册:www.unitymanual.com

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

}

001

using UnityEngine;

002

using System.Collections;

003

using System.Collections.Generic;

004

using pumpkin.display;

005

using pumpkin.events;

006

using pumpkin.tweener;

007

using pumpkin.text;

008

009

public class L2 : MonoBehaviour {

010

private Stage stage;

011

private MovieClip minimap;

012

private MovieClip background;

013

private MovieClip playerArea;

014

private MovieClip btnContainer;

015

private Dictionary<string,Handler> menus;

016

017

public float scaleRatio=0.5f;

018

public float angle=0f;

019

020

private delegate void Handler();

021

022

void Start () {

023

if(!MovieClipOverlayCameraBehaviour.instance)return;

024

stage=MovieClipOverlayCameraBehaviour.instance.stage;

025

026

background=new MovieClip("learnUniSwf/1/hud2.swf:Background");

027

[color=#008ef1]//背景全屏制作方法[/color]

028

background.x=-2;

029

background.y=-2;

030

background.scaleX=(stage.stageWidth+10)/background.width;

031

background.scaleY=(stage.stageHeight+10)/background.height;

032

stage.addChild(background);

033

034

minimap=new MovieClip("learnUniSwf/1/hud2.swf:Minimap");

035

playerArea=minimap.getChildByName<MovieClip>("player");

036

minimap.scaleX=minimap.scaleY=scaleRatio;

037

minimap.x=stage.stageWidth-minimap.width/2*scaleRatio-20f;

038

minimap.y=minimap.height/2*scaleRatio+20f;

039

stage.addChild(minimap);

040

041

BuildButtons();

042

}

043

044

void Update () {

045

angle+=Time.deltaTime*12f;

046

//动画,模拟minimap 扫描 

047

playerArea.rotation=angle;

048

}

049

050

void MenuData(){

051

menus=new Dictionary<string, Handler>();

052

menus.Add("New Game",HandlerStart);

053

menus.Add("Continue",HandlerContinue);

054

menus.Add("Options",HandlerOptions);

055

menus.Add("Exit",HandlerExit);

056

}

057

058

void BuildButtons(){

059

MenuData();

060

061

btnContainer=new MovieClip("learnUniSwf/1/hud2.swf:SimpleContainer");

062

stage.addChild(btnContainer);

063

064

int i=0;

065

foreach(KeyValuePair<string,Handler> keyvalue in menus){

066

MovieClip btn=new MovieClip("learnUniSwf/1/hud2.swf:SimpleButton");

067

btn.gotoAndStop(1);

068

btn.looping=false

069

//按钮子元素对Mouse 不触发事件,很关键,不然下文evt.target将指向Btn内的某元素 

070

btn.mouseChildrenEnabled=false;

071

btn.y=i*(btn.height+10f);

072

btn.name=keyvalue.Key;

073

btn.getChildByName<TextField>("txt").text=btn.name;

074

btnContainer.addChild(btn);

075

i++;

076

}

077

//Unity3D教程手册:www.unitymanual.com

078

btnContainer.x=stage.stageWidth/2;

079

btnContainer.y=(stage.stageHeight-btnContainer.height)/2;

080

//对按钮父容器进行监听,通过事件的target引用找到按钮 

081

btnContainer.addEventListener(MouseEvent.CLICK,ClickHandler);

082

btnContainer.addEventListener(MouseEvent.MOUSE_ENTER,OnEnter);

083

btnContainer.addEventListener(MouseEvent.MOUSE_LEAVE,OnLeave);

084

}

085

086

void HandlerStart(){

087

Debug.Log("handler start....");

088

}

089

090

void HandlerContinue(){

091

Debug.Log("handler continue....");

092

}

093

094

void HandlerOptions(){

095

Debug.Log("handler options....");

096

}

097

//Unity3D教程手册:www.unitymanual.com

098

void HandlerExit(){

099

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

}

Unity3D的uniSWF插件动态加载SWF UI资源相关推荐

  1. Unity3d实现手动选择动态加载PPT文件并展示

    Unity3d实现手动选择动态加载PPT文件并展示 前言 功能效果 功能实现 定义OpenFileName类 定SelectFileDialog类 选择文件 前言 上一篇文章我讲了Unity3d实现加 ...

  2. HoloLens1开发(三):Trilib插件动态加载模型-Part2

    前言 最近有新成员加入本团队,为了方便其开发HoloLens1 / HoloLens2,将不定时更新HoloLens相关开发相关内容. 软件需求: HoloLens 1:VS2017 + Unity2 ...

  3. HoloLens1开发(三):Trilib插件动态加载模型-Part1

    前言 最近有新成员加入本团队,为了方便其开发HoloLens1 / HoloLens2,将不定时更新HoloLens相关开发相关内容. 软件需求: HoloLens 1:VS2017 + Unity2 ...

  4. 【jquery】Chosen.jquery.js 插件动态加载数据问题

    Chosen.jquery.js目前版本v1.6.2,官方文档链接https://harvesthq.github.io/chosen/ 插件有一个css文件和一个js文件,都命名为Chosen,引入 ...

  5. js插件动态加载js、css解决方案

    最近因为工作需要做了一个js自动导入的插件,一开始很天真的以为动态创建个script添加到head中就ok了,试了之后才发现了问题,就是如果同时引入了多个js文件,而且后一个文件中用到了前一个文件中的 ...

  6. Bootstrap弹出框(Popover)插件动态加载数据

    效果 鼠标点击输入框弹出提示内容,内容是根据输入的字符动态加载的,效果如图: HTML <input type="text" class="form-control ...

  7. Day239.RBAC模式、动态加载用户权限资源规则数据规则、【记住我】注销多次登录图片验证码session验证码验证功能 -springsecurity-jwt-oauth2

    1.RBAC权限管理模型 一.RBAC权限模型简介 RBAC权限模型(Role-Based Access Control)即:基于角色的权限控制.模型中有几个关键的术语: 用户:系统接口及功能访问的操 ...

  8. VB动态加载纯DLL资源

    一.纯DLL资源的制作 打开VC6.0 创建一个基于win32的动态链接库 下一步中,要选择A sinmple Dll project 然后加载资源(注意对于超过256色的位图,VC不能编辑,不过这没 ...

  9. php网页动态加载swf,HTML嵌入SWF教程

    HTML嵌入SWF两种方式 采用SWFObject.js(依赖swfobject.js) var swfVersionStr = "10.0.0"; var xiSwfUrlStr ...

最新文章

  1. 平均符号熵的计算公式_交叉熵(Cross Entropy)从原理到代码解读
  2. 利用OnAnimatorove函数控制人物的移动
  3. wdpc V3 phpmyadmin打不开的一种解决方式(实测有效)
  4. react中绑定点击事件_在React中绑定事件处理程序的最佳方法
  5. V210 系统时间设置
  6. The command could not be located because '/sbin' is not included in the PATH environment variable.
  7. Android杂谈--ListView之ArrayAdapter的使用
  8. Linux编程中 #define _XOPEN_SOURCE的作用
  9. main函数中argc和argc参数解释
  10. python 判断数字连续_零基础如何自学python? 这些知识点是你进阶的必经之路
  11. 【软件测试】:测试改进措施总结
  12. php客户订单管理系统,PHP订单管理系统完整版源码PHP订单管理系统完整版源码
  13. limesurvey-怎么用
  14. 推荐给大家的桌面管理软件: Fences
  15. python合并word表格_python docx处理word文档中表格合并问题
  16. led流水灯c语言数组程序,LED流水灯程序 一维数组写法
  17. 概率统计Python计算:学生分布分位点计算
  18. PMOS和NMOS引脚及封装
  19. 原生分布式数据库与分库分表中间件、云原生数据库有何区别
  20. OSChina 周日乱弹 ——我18岁了都没睡过男人

热门文章

  1. 深信服罗政权 | 承载数字化转型基石,高筑数字化安全保障
  2. Matlab-数学建模-层次分析法
  3. OpenCV浅析及相关资源
  4. 爬虫-网站地址及反爬机制
  5. 计算机所有u口都不读u盘,U盘不被电脑识别,不要扔掉!解决方法!收藏!
  6. 第一辆5G汽车要在中国上路!真·5G车联网,体验如何?
  7. ECharts绘制地图分布,可自定义城市散点
  8. 基于Python pygame简易版斗兽棋小游戏源代码
  9. Other——电子产品的零售版本和OEM版本
  10. 教你认识水货手机翻新手机14天机的鉴别和选购