Flash to Unity UniSWF插件入门级教程代码
2015年03月19日 10:51
0 点赞
0 评论
更新于 2025-11-21 17:39
以下是一个使用 UniSWF 插件实现动态 UI 的示例代码,通过该代码可以学习如何在 Unity 中使用 UniSWF 插件加载 SWF 文件并创建动态的用户界面。
using UnityEngine;
using System.Collections;
using pumpkin.events;
using pumpkin.display;
using System.Collections.Generic;
using pumpkin.ui;
using pumpkin.text;
using pumpkin.logging;
public class TestDynamicUI : MonoBehaviour
{
// 舞台对象
private Stage stage;
// 主影片剪辑对象
private MovieClip mc;
// 存储键值对的字典
private Dictionary<string, string> dictionary;
// 初始化方法,在脚本实例被启用时调用
void Start()
{
// 初始化字典
dictionary = new Dictionary<string, string>();
dictionary["AAA"] = "A - A - A";
dictionary["BBB"] = "B - B - B";
dictionary["CCC"] = "C - C - C";
dictionary["DDD"] = "D - D - D";
dictionary["EEE"] = "E - E - E";
// 检查 MovieClipOverlayCameraBehaviour 实例是否存在
if (!MovieClipOverlayCameraBehaviour.instance)
{
return;
}
// 获取舞台对象
stage = MovieClipOverlayCameraBehaviour.instance.stage;
// 可以取消注释以调试舞台的宽度和高度
// Debug.Log(stage.stageWidth + "---" + stage.stageHeight);
// 创建主影片剪辑对象
mc = new MovieClip("uniSWF/Examples/Tutorial 06 - Dynamic UI/swf/tut06_ui_assets.swf:panel_info");
// 跳转到并停止在第 1 帧
mc.gotoAndStop(1);
// 将影片剪辑居中到舞台
ScreenUtils.center(stage, mc);
// 水平向右偏移 100 个单位
mc.x = mc.x + 100;
// 按钮计数器
int counts = 0;
// 按钮之间的垂直间距
int button_distance = 15;
// 遍历字典中的每个键值对
foreach (KeyValuePair<string, string> obj in dictionary)
{
// 创建按钮影片剪辑对象
MovieClip button = new MovieClip("uniSWF/Examples/Tutorial 06 - Dynamic UI/swf/tut06_ui_assets.swf:btn_generic");
// 跳转到并停止在第 1 帧
button.gotoAndStop(1);
// 设置按钮的水平位置
button.x = mc.x - 200;
// 设置按钮的垂直位置
button.y = mc.y + (counts * (button.height + button_distance));
// 设置按钮的名称
button.name = obj.Key.ToString();
// 获取按钮上的文本字段
TextField button_name = button.getChildByName<TextField>("txt");
// 设置文本字段的文本为按钮名称
button_name.text = button.name;
// 为按钮添加点击事件监听器
button.addEventListener(MouseEvent.CLICK, OnButtonClick);
// 为按钮添加鼠标进入事件监听器
button.addEventListener(MouseEvent.MOUSE_ENTER, OnButtonEnter);
// 为按钮添加鼠标离开事件监听器
button.addEventListener(MouseEvent.MOUSE_LEAVE, OnButtonLeave);
// 将按钮添加到舞台上
stage.addChild(button);
// 计数器加 1
counts++;
}
// 将主影片剪辑添加到舞台上
stage.addChild(mc);
}
// 每帧调用的更新方法
void Update()
{
// 此方法目前为空,可根据需求添加逻辑
}
// 按钮点击事件处理方法
private void OnButtonClick(CEvent e)
{
// 获取当前点击的按钮对象
MovieClip btn = e.currentTarget as MovieClip;
// 获取主影片剪辑上的文本字段
TextField textfield = mc.getChildByName<TextField>("txt");
// 设置文本字段的文本为按钮对应的字典值
textfield.text = dictionary[btn.name];
}
// 鼠标进入按钮事件处理方法
private void OnButtonEnter(CEvent e)
{
// 此方法目前为空,可根据需求添加逻辑
}
// 鼠标离开按钮事件处理方法
private void OnButtonLeave(CEvent e)
{
// 此方法目前为空,可根据需求添加逻辑
}
}
代码说明
- 初始化部分:在
Start方法中,首先初始化了一个字典,存储了一些键值对。然后检查MovieClipOverlayCameraBehaviour实例是否存在,如果存在则获取舞台对象。 - 创建主影片剪辑:创建一个主影片剪辑对象
mc,并将其居中到舞台,然后向右偏移 100 个单位。 - 创建按钮:遍历字典,为每个键值对创建一个按钮影片剪辑对象。设置按钮的位置、名称和文本,并为按钮添加点击、鼠标进入和鼠标离开事件监听器。
- 事件处理方法:
OnButtonClick方法处理按钮点击事件,将主影片剪辑上的文本字段的文本设置为按钮对应的字典值。OnButtonEnter和OnButtonLeave方法目前为空,可根据需求添加相应的逻辑。
通过这个示例代码,你可以学习到如何使用 UniSWF 插件加载 SWF 文件、创建影片剪辑对象、设置事件监听器等操作,从而实现动态的用户界面。