Fairy GUI 学习

  • 官方文档&UnitySDK
  • 关于Fairy导出及使用
  • 官方案例
    • 人物状态

官方文档&UnitySDK

官方文档
UnitySDK

关于Fairy导出及使用

FairyGUI中导出的文件,在加载方面相关的命名有着许多的困惑,在自己调试了之后解决了问题。

首先是在FairyGUI中我们已经做好的组件,名字是这样的
FairyGUI学习-编程知识网

然后打包到unity中是这样的
FairyGUI学习-编程知识网
最后加载相关的代码是这样的
FairyGUI学习-编程知识网
也就是说加载的话用的名字是和FairyGUI中的一样。

官方案例

人物状态

(1)首先在FairyGUI创建一个WindowFrame组件(设置基本的背景,关闭按钮,拖拽区域),这个命名按照规范命名的话可以使用官方封装好的方法
FairyGUI学习-编程知识网

基本预览图如图所示
FairyGUI学习-编程知识网

(2)然后创建一个Window添加相应的功能,比如人物的旋转按钮以及人物的加载
FairyGUI学习-编程知识网

这个Graph属性中图形设置为空白。
(3)设置界面的人物状态弹出按钮,导出到Unity中,记得在Unity中安装SDK
FairyGUI学习-编程知识网
这里就来到了Unity
(4)首先创建一个UIPanel设置其中的PackageName
(5)创建一个人物并创建一个专属的相机对准这个人物,并且创建一个RenderTexture赋值给我们新创建的相机,在创建一个这张RenderTexture的专属材质球。这些在我们记载这个人物状态(图片右下角)的时候会用到。
FairyGUI学习-编程知识网
(6)为这个UIPanel创建脚本并且添加上去

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using FairyGUI;public class CharacterState : MonoBehaviour
{public GameObject player;private GComponent mainUI;private Window window;private GButton btnCharacter;private GButton btnLeft;private GButton btnRight;private void Start(){mainUI = GetComponent<UIPanel>().ui;window = new Window();window.contentPane = UIPackage.CreateObject("CharacterState", "Window").asCom;WindowComInit();}private void WindowComInit(){//角色状态按钮的获取&事件的注册btnCharacter = mainUI.GetChild("n1").asButton;btnCharacter.onClick.Add(OnCharacterBtnClick);//旋转按钮的获取&事件注册btnLeft = window.contentPane.GetChild("n2").asButton;btnRight = window.contentPane.GetChild("n3").asButton;btnLeft.onClick.Add(OnBtnLeftClick);btnRight.onClick.Add(OnBtnRightClick);LoadCharacterTexture();}private void LoadCharacterTexture(){GGraph gGraph = window.contentPane.GetChild("n1").asGraph;Image image = new Image();RenderTexture renderTexture = Resources.Load<RenderTexture>("Model/PlayerRT");Material mat = Resources.Load<Material>("Model/PlayerMat");image.texture = new NTexture(renderTexture);image.material = mat;gGraph.SetNativeObject(image);}/// <summary>/// 角色状态的按钮事件/// </summary>private void OnCharacterBtnClick(){window.Show();window.SetPosition(400, 300, 0);}private void OnBtnRightClick(){Debug.Log("right");player.transform.Rotate(Vector3.up * 30, Space.World);}private void OnBtnLeftClick(){Debug.Log("left");player.transform.Rotate(Vector3.up * -30, Space.World);}
}