Fairy GUI 学习
官方文档&UnitySDK
关于Fairy导出及使用
在FairyGUI中导出的文件,在加载方面相关的命名有着许多的困惑,在自己调试了之后解决了问题。
首先是在FairyGUI中我们已经做好的组件,名字是这样的
然后打包到unity中是这样的
最后加载相关的代码是这样的
也就是说加载的话用的名字是和FairyGUI中的一样。
官方案例
人物状态
(1)首先在FairyGUI创建一个WindowFrame组件(设置基本的背景,关闭按钮,拖拽区域),这个命名按照规范命名的话可以使用官方封装好的方法
基本预览图如图所示
(2)然后创建一个Window添加相应的功能,比如人物的旋转按钮以及人物的加载
这个Graph属性中图形设置为空白。
(3)设置界面的人物状态弹出按钮,导出到Unity中,记得在Unity中安装SDK
这里就来到了Unity
(4)首先创建一个UIPanel设置其中的PackageName
(5)创建一个人物并创建一个专属的相机对准这个人物,并且创建一个RenderTexture赋值给我们新创建的相机,在创建一个这张RenderTexture的专属材质球。这些在我们记载这个人物状态(图片右下角)的时候会用到。
(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);
}
}