精华内容
下载资源
问答
  • unity fairygui 列表展开效果 简单记录一下 列表第一次滑动,先展开(高度从100 变到300)再滑动 为了避免列表滑动后显示的组件不完整,勾选次按钮 这是组件代码,内容比较简单 using System; using FairyGUI; ...

    unity fairygui 列表展开效果

    简单记录一下
    列表第一次滑动,先展开(高度从100 变到300)再滑动

    为了避免列表滑动后显示的组件不完整,勾选此按钮在这里插入图片描述

    效果

    这是组件代码,内容比较简单

    using System;
    using FairyGUI;
    using FairyGUI.Utils;
    using BCore;
    using UnityEditor;
    
    public class ListFrame : GComponent
    {
        private GList list;
        private bool listOpen;
        private bool listHide;
    
    	public override void ConstructFromXML(XML xml)
        {
            base.ConstructFromXML(xml);
            list = GetChild("list").asList;
            list.scrollPane.onScroll.Add(UpdaeListHeightUp);
            list.scrollPane.onPullDownRelease.Add(UpdateListHeightDown);
            //list.onClick.Add(UpdaeListHeight);
        }
    
    	
    	public void OnShow()
    	{
            listOpen = false;
            listHide = false;
            list.height = 100;      //  默认高度
            UpdateList();
        }
    
    	public void OnHide()
        {
            BEventMgr.I.removeAllEvent(this);
            list.RemoveChildrenToPool();
        }
    
        private void UpdateList()
        {
            for(int i = 0; i < 15; i++)
            {
                var cell = list.AddItemFromPool().asCom;
                //  设置该组件信息
            }
        }
    
        //  如果是下滑
        private void UpdateListHeightDown()
        {
            if (list.height > 150 && list.scrollPane.scrollingPosY <= 0 && !listHide)
            {
                listHide = true;
                listOpen = false;
                NumRoll.I.StartChangeListHeight(list, list.height, 150, 0.5f);
            }
        }
    
        //  如果是上滑
        private void UpdaeListHeightUp()
        {
            if (list.height < 500 && list.scrollPane.scrollingPosY > 0 && !listOpen) 
            {
                listOpen = true;
                listHide = false;
                NumRoll.I.StartChangeListHeight(list, list.height, 500, 0.5f);
            } 
        }
    }
    

    这是使用的协程方法

      private IEnumerator UpdateListHeight(GList list, float startNum, float endNum,float time)
        {
            float interval = time / 30;
            DateTime beginTime = DateTime.Now;
            DateTime endTime = DateTime.Now.AddSeconds(time);
            double delta;
            while (true)
            {
                if(DateTime.Now >= endTime)
                {
                    list.height = endNum;
                    break;
                }
                delta = (DateTime.Now - beginTime).TotalSeconds;
                float currTime = (float)delta / time;
                float currNum = Mathf.Lerp(startNum, endNum, currTime);
                list.height = currNum;
                yield return new WaitForSeconds(interval);
            }
        }
    
    展开全文
  • FairyGUI列表裁剪粒子

    2021-04-02 15:43:18
    教程网址.https://www.fairygui.com/docs/unity/insert3d 这是原文:首先将列表转换为一个组件,在组件内拖入一个矩形图形覆盖列表的视口,然后将这个图形设置为组件的自定义遮罩。 这里分下步骤: 1.将列表转换为一...

    教程网址.https://www.fairygui.com/docs/unity/insert3d

    这是原文:首先将列表转换为一个组件,在组件内拖入一个矩形图形覆盖列表的视口,然后将这个图形设置为组件的自定义遮罩。
    

    这里分下步骤:
    1.将列表转换为一个组件,
    2.在组件内拖入一个矩形图形覆盖列表的视口
    3.然后将这个图形设置为组件的自定义遮罩。
    4.修改Shader文件

    1.2.3的步骤
    在这里插入图片描述
    第4步,直接copy啦,有能力者自己再写的完美点

    Shader "fgui_Particles/fgui_CutParticles" {
    	Properties {
    		_TintColor ("TintColor", Color) = (1,1,1,1)
    		_MainTex ("Particle Texture", 2D) = "white" {}
    		[HideInInspector]_AlphaTex ("Trans (A)", 2D) = "white" {}
    		
    		_StencilComp ("Stencil Comparison", Float) = 8
    		_Stencil ("Stencil ID", Float) = 0
    		_StencilOp ("Stencil Operation", Float) = 0
    		_StencilWriteMask ("Stencil Write Mask", Float) = 255
    		_StencilReadMask ("Stencil Read Mask", Float) = 255
    	}
    	Category {
    		Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
    		Blend SrcAlpha One
    		Cull Off Lighting Off  Fog { Mode Off }
    		ZWrite Off
    		ColorMask RGB
    		SubShader {		
    			Stencil
    			{
    				Ref [_Stencil]
    				Comp [_StencilComp]
    				Pass [_StencilOp] 
    				ReadMask [_StencilReadMask]
    				WriteMask [_StencilWriteMask]
    			}	
    			Pass {				
    				CGPROGRAM
    				#pragma vertex vert
    				#pragma fragment frag
    				#pragma multi_compile_particles
    				#pragma fragmentoption ARB_precision_hint_fastest
    				#include "UnityCG.cginc"
    				sampler2D _MainTex;
    				//sampler2D _AlphaTex;
    				fixed4 _TintColor;				
    				struct appdata_t {
    					half4 vertex : POSITION;
    					fixed4 color : COLOR;
    					half2 texcoord : TEXCOORD0;
    				};
    				struct v2f {
    					half4 vertex : SV_POSITION;
    					fixed4 color : COLOR;
    					half2 texcoord : TEXCOORD0;
    				};				
    				half4 _MainTex_ST;
    				v2f vert (appdata_t v)
    				{
    					v2f o;
    					o.vertex = UnityObjectToClipPos(v.vertex);
    					o.color = v.color;
    					o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
    					return o;
    				}
    				fixed4 frag (v2f i) : SV_Target
    				{	
    					fixed4 col = tex2D(_MainTex, i.texcoord);
    					//col.a = tex2D(_AlphaTex, i.texcoord).r;
    					half4 result = 2.0f * i.color * _TintColor * col;
    					return result;
    				}
    				ENDCG 
    			}
    		}
    	}
    }
    

    把自己的粒子特效prefab的shader都指定下…(都,都,都)指定
    加载特效的代码在 fgui的例子13中
    效果如图
    在这里插入图片描述

    展开全文
  • FairyGUI循环列表

    热门讨论 2021-05-21 16:39:29
    循环列表 一、导入资源 二、新建按钮 三、设计列表 四、装载器动态加载图片按钮 如果有上万个按钮,我们不可能一个个创建,这时候就需要在Unity中动态加载图片按钮的资源,故此引入装载器。 按钮大小是248...

    FairyGUI循环列表

    实现效果:在Unity中,通过鼠标可以循环浏览列表,并且浏览当前页时,有一个近大远小的效果。
    

    在这里插入图片描述

    一、导入资源

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    二、新建按钮

    在这里插入图片描述

    三、设计列表

    在这里插入图片描述
    在这里插入图片描述

    四、装载器动态加载图片按钮

    如果有上万个按钮,我们不可能一个个创建,这时候就需要在Unity中动态加载图片按钮的资源,故此引入装载器。
    

    按钮大小是248×378,那么装载器也应该是248×378。然后将其位置归为0,0。
    在这里插入图片描述
    在这里插入图片描述
    再次进入列表,给它多添加几个对象。
    在这里插入图片描述

    五、打包发布

    在这里插入图片描述
    在这里插入图片描述

    六、Unity中显示

    在这里插入图片描述
    在这里插入图片描述

    七、编写代码

    在这里插入图片描述

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using FairyGUI;
    
    public class LoopList : MonoBehaviour
    {
        private GComponent mainUI;
        private GList list;
        void Start()
        {
            mainUI = GetComponent<UIPanel>().ui;
            list = mainUI.GetChild("n0").asList;  //n0是FairyGUI中的列表
            list.SetVirtualAndLoop();  //把列表设置为虚拟列表(FGUI规定:如果使用列表,则必须使用虚拟列表)
            list.itemRenderer = RenderListItem;  //调用list里面的渲染函数,它是一个委托类型的变量,所以要给它赋值一个方法
            list.numItems = 5;  //设置列表长度
        }
        
        private void RenderListItem(int index, GObject obj)
        {
            GButton button = obj.asButton;
            button.icon = UIPackage.GetItemURL("LoopList", "n" + (index + 1));  //动态获取URL
        }
    }
    

    编译运行,回到Unity发现报错。原来在FairyGUI中忘记拖入项目资源了,手动拖入即可。
    在这里插入图片描述
    在这里插入图片描述
    再次重新发布一下
    在这里插入图片描述
    此时,回到Unity,运行结果如下。发现“第二章”、“第三章”下边的图片都是“第一章”下边的图片。什么原因呢?因为之前我们在FairyGUI中给了Button1一个渲染,显然这是不可以的。所以我们要把它本身的图片渲染给删掉。直接通过icon对它加载就可以了。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    还有一个地方就是,找到LoopList列表,把它的溢出处理设置为“水平滚动”。
    在这里插入图片描述
    再次发布,运行一切正常。

    八、运行效果

    在这里插入图片描述

    九、进一步完善——近大远小的特效

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using FairyGUI;
    
    public class LoopList : MonoBehaviour
    {
        private GComponent mainUI;
        private GList list;
        void Start()
        {
            mainUI = GetComponent<UIPanel>().ui;
            list = mainUI.GetChild("n0").asList;  //n0是FairyGUI中的列表
            list.SetVirtualAndLoop();  //把列表设置为虚拟列表(FGUI规定:如果使用列表,则必须使用虚拟列表)
            list.itemRenderer = RenderListItem;  //调用list里面的渲染函数,它是一个委托类型的变量,所以要给它赋值一个方法
            list.numItems = 5;
    
            list.scrollPane.onScroll.Add(DoSpecialEffect);
            DoSpecialEffect();
        }
    
        private void DoSpecialEffect()
        {
            float listCenter = list.scrollPane.posX + list.viewWidth / 2;
            //scrollPane是当前列表的宽度;viewWidth是列表自身宽度
            for (int i = 0; i < list.numChildren; i++)  //numChildren是当前渲染的对象,也就是运行时Game中能看见的个数
            {
                GObject item = list.GetChildAt(i);
                float itemCenter = item.x + item.width / 2;
                float itemWidth = item.width;
                float distance = Mathf.Abs(listCenter - itemCenter);
                if (distance < itemWidth)
                {
                    float distanceRange = 1 + (1 - distance / itemWidth) * 0.2f;
                    item.SetScale(distanceRange, distanceRange);
                }
                else
                {
                    item.SetScale(1, 1);
                }
            }
        }
        private void RenderListItem(int index, GObject obj)
        {
            GButton button = obj.asButton;
            button.SetPivot(0.5f, 0.5f);  //设置锚点为中心位置
            button.icon = UIPackage.GetItemURL("LoopList", "n" + (index + 1));  //动态获取URL
        }
    }
    

    在这里插入图片描述
    将列表和按钮分别与容器做一下关联
    在这里插入图片描述

    在这里插入图片描述
    发布后在Unity中运行就没有任何问题了。

    十、最终完美效果图

    在这里插入图片描述

    展开全文
  • FairyGUI虚拟列表

    2021-03-08 20:58:36
    虚拟列表开启的前提条件: 1、需要定义itemRenderer hero_List.itemRenderer = RenderListItem; 注:RenderListItem方法是固定的方法类型 2、需要开启滚动。溢出处理不是滚动的列表不能开启虚拟。 3、需要设置好...

    先上代码为敬:

            hero_List.itemRenderer = RenderListItem;
            hero_List.defaultItem = "ui://o3ujglcdqacwi3t";
            hero_List.SetVirtual();
            hero_List.numItems = LocalConfigManager.Instance.GetDic_HeroPONum();
            hero_List.SetVirtualAndLoop();

    虚拟列表开启的前提条件:

    1、需要定义itemRenderer  

    hero_List.itemRenderer = RenderListItem;

    注:RenderListItem方法是固定的方法类型

    2、需要开启滚动。溢出处理不是滚动的列表不能开启虚拟。

    3、需要设置好列表的“项目资源”。可以在编辑器内设置,也可以调用GList.defaultItem设置。

    hero_List.defaultItem = "ui://o3ujglcdqacwi3t";

    这里的资源项就是在FairyGUI中设置的Item

     

    注:虚拟功能只能开启,不能关闭。

    更多详细情况请查看官网:https://www.fairygui.com/docs/guide/editor/list.html

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • Layabox引擎下fairygui虚拟列表的使用

    千次阅读 2018-10-22 17:13:43
    列表的item非常多是,创建多个item项无疑非常消耗时间和资源,这里就需要用到虚拟列表了,虚拟列表可以重复利用创建的item,事实上该列表创建Item的最大数量应该是列表最大可见的数量,这个数量通常由你创建列表的...
  • FairyGUI-GList列表组件

    2021-05-09 13:47:42
    布局组件也是常用的组件。首先介绍GList组件。 ...using FairyGUI; /* * Author:W * List列表布局 */ public class GListTest : MonoBehaviour { private GComponent root; private GL..
  • //开启虚拟列表 this.ui.m_List.itemRenderer = this.renderAchListItem.bind(this);//设置列表item的渲染函数 this.ui.m_List.itemProvider = this.getListItemResource.bind(this);//设置这个函数为列表的item提.....
  • FairyGUI

    2019-10-28 21:31:05
    学习资料、 官网 初学FairyGUI,对比NGUI FairyGUI中常用的方法,对比UGUI FGUI入门了解 a=arctan(y/x) 角度=弧度*180度/PI
  • 这里的代码基于循环列表的基础上改进的,可以参考FairyGUI使用——循环列表 FairyGUI内部设置 list的大小要有余留,否则无法渲染出放大的部分 list与内部的button的装载器都要设置为关联容器,并调整为左右居中,...
  • FairyGUI笔记:列表(十九)

    万次阅读 2018-11-08 11:50:24
    FairyGUI中,列表的本质就是一个组件,GList也是从GComponent派生来的,所以你可以用GComponent的API直接访问列表能容,例如可以用GetChild或者GetChildAt访问列表内的项目;也可以用AddChild添加一个item。 当你...
  • Unity:2021.1.14flc1 FairyGUI:4.2.0 虚拟列表 如果列表的item数量特别多时,例如几百上千,为每一条项目创建实体的显示对象将非常消耗时间和资源。FairyGUI列表内置了虚拟机制,也就是它只为显示范围内的item...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 176
精华内容 70
关键字:

fairygui列表