昨天把代码大致清理了一遍之后,发现代码中存在很大的一个问题是数据和表现耦合在一起了,如下:
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后,会有UIPanel和UICAmera两个基础组件。
1、UIPanel:创建它,并配置属性,可以生成所有你在FairyGUI里编辑的组件。
2、UICamrea:FairyGUI自带的一个相机,可以替换掉主相机。

解决方案:因为只是勾选了全局设置的“发布代码”,没有勾选包设置的发布代码。


勾选后成功解决。
2、导出代码后,尝试创建一个界面却一直报错。提示强转类型失败。

解决方案:根据官网提示,需要先Binder.BindAll(),加上后问题解决。

fairygui简单使用(unity)
上一篇:一老一少的成语有哪些
下一篇:形容书好的成语