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

相关文章

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文