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

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

Java导出Excel动态表头的示例详解

《Java导出Excel动态表头的示例详解》这篇文章主要为大家详细介绍了Java导出Excel动态表头的相关知识,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录前言一、效果展示二、代码实现1.固定头实体类2.动态头实现3.导出动态头前言本文只记录大致思路以及做法,代码不进

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

解读静态资源访问static-locations和static-path-pattern

《解读静态资源访问static-locations和static-path-pattern》本文主要介绍了SpringBoot中静态资源的配置和访问方式,包括静态资源的默认前缀、默认地址、目录结构、访... 目录静态资源访问static-locations和static-path-pattern静态资源配置

SpringBoot实现动态插拔的AOP的完整案例

《SpringBoot实现动态插拔的AOP的完整案例》在现代软件开发中,面向切面编程(AOP)是一种非常重要的技术,能够有效实现日志记录、安全控制、性能监控等横切关注点的分离,在传统的AOP实现中,切... 目录引言一、AOP 概述1.1 什么是 AOP1.2 AOP 的典型应用场景1.3 为什么需要动态插