Steam项目推进(二)—— 在项目中使用FairyGUI

一、遇到的问题

昨天把代码大致清理了一遍之后,发现代码中存在很大的一个问题是数据表现耦合在一起了,如下:

using UnityEngine;
using UnityEngine.UI;

public enum CardStateType
{
    InDeck, InHand, InBattle, InSave, InAbandon
}


//卡牌的战斗形态
public class CardOperate : MonoBehaviour
{
    [Header("隶属的卡牌")]
    public Card ownCard;

    public int thisId;


    //展示属性:属性会挂钩到其他text 用于显示
    public int id;

    [Header("展示属性(界面赋值)")]
    public Text nameText;
    public Text costText;
    public Text descriptionText;
    public Image cardImage;
    public Image colorFrame;

    [Header("手牌区")]
    public GameObject hand;	 //表现
    [Header("出牌区")]
    public GameObject battle;
    [Header("弃牌区")]
    public GameObject abandon;

    [Header("留牌区")]
    public GameObject savePanel;

    private CardStateType currentState;     //数据

    public static bool UcanReturn;

    public CardStateType CurrentState()
    {
        return this.currentState;
    }  
}

初步的想法是抽离出Model层和View层,Model层保存数据,View做表现。需要搭建一个事件系统来隔离两者的耦合。

然后因为做UI以及UI管理是我的弱项,所以这边打算引入之前公司使用的FairyGUI来处理UI。 (与UGUI本身资源和代码的耦合度较高也有一定关系吧

二、搭建过程

1、下载方法可看这篇博客:fairygui简单使用(unity)

2、在untiy的资源商店中下载FairyGUI插件,不然导出的代码会报错。

2、新建一个按钮组件,可看官网:创建按钮组件的方式

把FairyGUI编辑器的打开添加到自定义菜单栏,这样就省不少功夫。
新建一个C#文件,并输入如下代码

using UnityEngine;
using UnityEditor;
using System.Diagnostics;

public class UnityEdite
{
    [MenuItem("FairyGUI/Open")] // MenuItem在编辑器中创建相对应的菜单栏
    static void OpenFairyGUI()
    {
        string exePath = @"D:\FairyGUI\FairyGUI-Editor" + "/FairyGUI-Editor.exe"; //FairyGUI编辑器路径
        Process.Start(exePath);
    }
}
//如果没有效果,那么你需要检查下:
//1. 项目中的所有代码没有报错,能够正常编译
//2. 如果1没问题,就重启下unity

在这里插入图片描述

FairyGUI的学习

在这里插入图片描述
导入FairyGUI后,会有UIPanel和UICAmera两个基础组件。
1、UIPanel:创建它,并配置属性,可以生成所有你在FairyGUI里编辑的组件。
2、UICamrea:FairyGUI自带的一个相机,可以替换掉主相机。

三、遇到的问题

1、根据文档中进行发布时,一直没办法生成代码,设置了,但FUIExport文件夹为空。如下

在这里插入图片描述
解决方案:因为只是勾选了全局设置的“发布代码”,没有勾选包设置的发布代码。
在这里插入图片描述
在这里插入图片描述
勾选后成功解决。

2、导出代码后,尝试创建一个界面却一直报错。提示强转类型失败。
在这里插入图片描述
解决方案:根据官网提示,需要先Binder.BindAll(),加上后问题解决。
在这里插入图片描述
3、对于导出的代码class,有partial关键字修饰,可以做拓展,但是我现在需要在该类初始化时做一些事情,就像样例中的 OnInit函数一样,但因为这个导出的代码没办法继承其他类,导致无法重写,把我难住了。
目前想到的办法:
(1)重写GComponent类,让它支持OnInit
(2)根据官方文档,重写ConstructFromXML(XML xml),但FairyGUI代码自动生成把ConstructFromXML占用了,不能重复重写。
在这里插入图片描述
解决方案:最终是在GComponent类中写了一个ReadyForRun函数,效果与ConstructFromXML相同,但用于自写。
在这里插入图片描述
注: 其实应该不需要这么写的,但目前先这样解决。

四、参考文章

fairygui简单使用(unity)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值