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

2024-02-19 21:08

本文主要是介绍unity基础开发----Unity3D的uniSWF插件动态加载SWF UI资源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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<MovieClip>("roundArea");
btn.getChildByName<TextField>("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<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");}
}


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<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;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<MovieClip>("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<string, Handler>();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<string,Handler> 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<TextField>("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);}}


这篇关于unity基础开发----Unity3D的uniSWF插件动态加载SWF UI资源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/725979

相关文章

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...