FairyGUI人物状态弹窗

一、新建包和组件




二、导入素材

点击此处下载素材

三、制作主界面

主界面就是一个简单的人物头像按钮

1、新建按钮


2、双击进入Button组件,给它设置一个缩放,当它按下的时候让它缩放一下,紧接着将声音素材拖进来,效果会更好。


3、将按钮拖入Main组件

4、制作弹窗

(1)首先要有一个容器组件装弹窗


(2)设置窗口背景(408×436),将PlayerWindow大小也设置为408×436。

5、制作窗口框架

(1)新建组件Windowframe


(2)给Windowframe添加背景图
可以直接在框架里面做背景,所以可以把下面这张背景图片删掉。


(3)新建关闭按钮



(4)制作框架拖拽区域
窗口框架还需要一个拖拽区域,也就是让玩家点击这个区域的时候,窗口整体会根据玩家鼠标移动。


将图形重命名为dragArea,这是官方规定的名字!!!

将关闭按钮也重新命名,方便后面的操作。

(5)添加背景图片,让它显得不那么单调


窗口框架制作完毕!

6、回到PlayerWindow,拖入窗口框架

7、设置图形占位

玩家是一个3D物体,所以到时候要把3D物体照射在一张UI上,然后把这张UI显示在我们这个窗口上。那么我们到时候就需要用到Texture,把摄像机照射到的内容加载出来。所以就需要有一个占位,于是我们这里拖入一个图形。

8、新建按钮

人物加载出来之后,还需要有一个旋转等动态,于是需要添加按钮让人物扭一扭。



四、Unity中准备工作

1、首先导入player.unitypackage资源包

2、将npc拖入场景

我们不希望人物显示,也就是不希望人物与游戏场景界面有任何的关联。所以把他位置设置得远远地,我们只是想让他动态的做成一张渲染图片,并不需要这个模型。


3、新建摄像机渲染人物


选中Camera聚焦一下

由于只渲染游戏物体的一层,所以把他当做UI层去渲染,因此需要添加一个标签。


4、创建Render Texture

重命名为PlayerRT


5、创建材质球

(1)重命名为PlayerMat

(2)把材质赋值给Material

(3)设置一下它的Shader

后期只需要加载PlayerMat和PlayerRT就可以渲染了!到这儿,所有的准备工作做得差不多了,之后就把刚刚在FairyGUI中做的资源打一下包。

五、打包发布


★★★★★FairyGUI发布失败诡异现象★★★★★

这时提示发布失败,如上图所示。究竟是什么原因呢?这个问题困扰了许久,那我是怎么解决的呢?我又重新创建了一个新的项目,当导入qtm01d.swf资源的时候,发现了问题的所在。原来是qtm01d.swf碍事了。于是我们可以采取两种做法:一、直接去掉这个点击音效;二、自己再另外寻找一个点击音效资源,不用素材给定的,有毒,哈哈。本人较懒,直接删除了事。


再次重新发布,问题得到解决。

六、Unity中显示


UI Panel重命名为PlayerView

七、编码控制

1、新建两个脚本

第一个是控制显示的主脚本PlayerView;
第二个是弹出窗脚本PlayerWindow。

2、编辑脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using FairyGUI;public class PlayerView : MonoBehaviour
{private GComponent mainUI;private PlayerWindow playerWindow;public GameObject player;void Start(){mainUI = GetComponent<UIPanel>().ui;playerWindow = new PlayerWindow(player);mainUI.GetChild("n0").onClick.Add(() => { playerWindow.Show(); });}// Update is called once per framevoid Update(){}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using FairyGUI;public class PlayerWindow : Window
{private GameObject player;public PlayerWindow(GameObject player){this.player = player;}protected override void OnInit(){this.contentPane = UIPackage.CreateObject("PlayerView", "PlayerWindow").asCom;GGraph holder = contentPane.GetChild("n2").asGraph;RenderTexture renderTexture = Resources.Load<RenderTexture>("FGUI/PlayerView/PlayerRT");Material mat = Resources.Load<Material>("FGUI/PlayerView/PlayerMat");Image img = new Image();img.texture = new NTexture(renderTexture);img.material = mat;holder.SetNativeObject(img);}
}

3、运行效果


但是发现,点击右上角的×是没有响应的,说明还有一些问题。
回到FairyGUI,回到窗口框架PlayerWindow里,发现ButtonClose显示在了最上面,因为我们这个UI的显示对这个深度上有严格的要求。所以我们把这个×的按钮渲染在最下面。

4、重新发布,运行后没有问题

5、做人物左右旋转

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using FairyGUI;public class PlayerWindow : Window
{private GameObject player;public PlayerWindow(GameObject player){this.player = player;}protected override void OnInit(){this.contentPane = UIPackage.CreateObject("PlayerView", "PlayerWindow").asCom;GGraph holder = contentPane.GetChild("n2").asGraph;RenderTexture renderTexture = Resources.Load<RenderTexture>("FGUI/PlayerView/PlayerRT");Material mat = Resources.Load<Material>("FGUI/PlayerView/PlayerMat");Image img = new Image();img.texture = new NTexture(renderTexture);img.material = mat;holder.SetNativeObject(img);this.contentPane.GetChild("n3").onClick.Add(() => { RotateLeft(); });this.contentPane.GetChild("n4").onClick.Add(() => { RotateRight(); });}private void RotateLeft(){player.transform.Rotate(Vector3.up * 30, Space.World);}private void RotateRight(){player.transform.Rotate(Vector3.up * (-30), Space.World);}
}

八、最终效果

FairyGUI人物状态弹窗相关推荐

  1. python 梦幻西游_tensorflow实践:梦幻西游人物弹窗识别(二)

    由上一篇的思路我们可以定义以下的具体实现步骤 本篇将围绕窗口捕获.屏幕截图.截图切分讲述screen.py代码 环境描述C:\Users\SF>ver Microsoft Windows [版本 ...

  2. FairyGUI学习

    Fairy GUI 学习 官方文档&UnitySDK 关于Fairy导出及使用 官方案例 人物状态 官方文档&UnitySDK 官方文档 UnitySDK 关于Fairy导出及使用 在 ...

  3. 设计模式学习笔记-状态模式

    引言 使用该设计模式的情况:如在场景中的主角甚至是敌人,有N个不同状态:走路,攻击,待机.....,游戏中,这些状态来回切换.有一个明确的状态划分的情况下,此时,是可以使用Switch...case. ...

  4. Java 保姆级教程——3.添加地图,地图根据人物移动

    Java 保姆级教程--3.添加地图,地图根据人物移动 注:经过上期的学习,我们学习了如何创建JFrame窗体.如何添加监听事件.根据大家给我的反馈,这一期给大家讲述:如何添加地图.地图如何根据人物移 ...

  5. UnityStandardAsset工程、源码分析_7_第三人称场景[玩家控制]_人物逻辑

    上一章地址:UnityStandardAsset工程.源码分析_6_第三人称场景[玩家控制]_工程组织 上一章里,我们花了一整章的篇幅用于分析场景的结构和处理流程,并且确定了本章的分析目标:Third ...

  6. 从零开始重写KOK1(万王之王1) —— (1)让人物可在地图上使用鼠标跑动

    从飞信裸辞已经2个月了,因为对游戏的爱,和做出好玩的游戏这个梦想.<Windows游戏编程大师技巧>(以下简称<大师>)这书已经读完,DEMO也都搞清楚了,为了确实的掌握2D游 ...

  7. 游戏开发设计模式之状态模式 有限状态机 c#委托事件(unity3d 示例实现)

    命令模式:游戏开发设计模式之命令模式(unity3d 示例实现) 对象池模式:游戏开发设计模式之对象池模式(unity3d 示例实现) 原型模式:游戏开发设计模式之原型模式 & unity3d ...

  8. python人物代码_Python 超级玛丽代码实现:人物行走和碰撞检测

    功能介绍 人物行走 人物的行走速度这边分成水平方向(X轴)和竖直方向(Y轴),水平方向的速度要考虑加速度和摩擦力,竖直方向的速度要考虑重力加速度.水平方向:设定X轴向右走的速度为大于0,向左走的速度为 ...

  9. 联想电脑“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态” 解决方法

    当在虚拟机上安装Ubuntu系统时,出现 "此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态" 弹窗 此时需要进入BIOS修改相关的设置,此处以联想idea ...

最新文章

  1. Windows下当地RabbitMQ服务的安装
  2. 公司的API接口被刷了,那是因为你没这样做
  3. 第二代NumPy?阿里开源超大规模矩阵计算框架Mars
  4. 每日站立会议10(完成)
  5. codeforces 711B - Chris and Magic Square(矩阵0位置填数)
  6. GraphPad Prism 9 如何一次处理多张图表?
  7. Java就业前景怎么样?值得学吗?
  8. BEGIN-4 Fibonacci数列
  9. tyvj1202 数数食物链
  10. CSS布局:三栏布局,中间栏固定宽度,左右两边自适应
  11. 想起“不能什么都是你来干”
  12. excel如何拟合直线(怎样用excel拟合直线)
  13. 多元统计分析matlab,matlab与应用多元统计分析..doc
  14. pandas之DataFrame常用方法
  15. 数独基本规则_独数游戏,数独题目大全
  16. python里面pow是什么意思_pow在python中是什么意思
  17. JSP中用List list = new ArrayList();报错, List cannot be resolved to a type
  18. svc的参考文献_浅谈SVC的原理及作用
  19. 好用的工具推荐一下js美化代码
  20. Java反射系列--Type接口及其子接口

热门文章

  1. 作为产品助理的这一年
  2. maven -pl -am -amd 参数
  3. 会声会影X5(专业视频编辑软件) v15.0 官方简体中文版
  4. 如何系统的学习IT技术?
  5. Unity3d入门选作作业(一)
  6. 【流程工业生产运行的“疑难杂症”,“自主运行”来解决!】
  7. 【聚划算 Android 技术周刊 第五期- 20160912】
  8. lotus notes java_Lotus Notes邮件开发——JAVA(2) | 学步园
  9. 国内外数据安全治理框架介绍与分析
  10. UILabel attributedText