• 在《【Unity3D】公告栏与开始界面的布置》(点击打开链接)曾经做了一个不太好的示范,这种UGUI的滚动条布置虽然简单,但只适用于静态文本,对于动态文本的话,还需要一定的设置。如下的例子,是在一个框中,每个0.5...

    在《【Unity3D】公告栏与开始界面的布置》(点击打开链接)曾经做了一个不太好的示范,这种UGUI的滚动条布置虽然简单,但只适用于静态文本,对于动态文本的话,还需要一定的设置。如下的例子,是在一个框中,每个0.5s就会多增加一行的动态本文,但是右侧的滚动条却能很好地配合其滚动。


    这个UGUI应该如下布置。

    1、首先还是整一个Plane或者Image,这里是Image,然后上Mask和Scroll Rect两个组件。


    同时指明Text就是那个Text,Vertical Scrollbar就是那个ScrollBar。当然ScrollBar的方向也自然改成从上到下。


    2、最关键是Text的修改,否则无法匹配动态文本生成文本的滚动需要!

    (1)一是需要修改这个在Image旗下的动态文本的对齐方式,改成横向伸展,同时Pivot这个锚点,Y改成1,X是什么无所谓,关于Unity3d的锚点可以参考《【Unity3D】UGUI自适应屏幕与锚点》(点击打开链接)。

    (2)二是,上一个Content Size Fitter的组件,并且设置Vertical Fit为Perferred Size。



    这样,就算动态文本以0.5s增加一行,旁边的滚动条也可以很好地适配。

    至于文本是怎么以0.5s增加一行的,具体代码如下,可以参考《【Unity3D】协程Coroutine的运用》(点击打开链接)。

    using UnityEngine;
    using UnityEngine.UI;
    using System.Collections;
    
    public class NewBehaviourScript : MonoBehaviour
    {
        public GameObject Text1;
        void Start()
        {
            StartCoroutine(coroutine1());
        }
        IEnumerator coroutine1()
        {
            while (true)
            {
                Text1.GetComponent<Text>().text += "sadasdasd\n";
                yield return new WaitForSeconds(0.5f);
            }
    
        }
    }
    


    展开全文
  • 自动滚动布局,可以显示任何放置在它中的内容显示出来,如果不适合,将显示滚动条。BeginScrollView的调用必须与EndScrollView的调用匹配。
  • 如果GUI控件超出其显示区域,视图下方或者右方将会出现滚动条。比如游戏中帮助信息或关于信息过长,就可以使用滚动条来查看相关信息。 滚动条由两部分组成,一个是 GUI.BeginScrollView,用于开始滚动视图,另一个...

    Scroll View控件可以设定一个滚动显示区域。如果GUI控件超出其显示区域,视图下方或者右方将会出现滚动条。比如游戏中帮助信息或关于信息过长,就可以使用滚动条来查看相关信息。

    滚动条由两部分组成,一个是 GUI.BeginScrollView,用于开始滚动视图,另一个是 GUI.EndScrollView,用于结束滚动视图。需要滚动显示的内容就夹在其间,具体使用方法示例如下:

    using UnityEngine;
    using System.Collections;
    
    public class Scrollbar控件 : MonoBehaviour {
    
    	//定义存储滚动条的位置变量 
    	Vector2 scrollPosition;
    
    
    	void start(){
    		scrollPosition [0] = 50;        //表示滚动视图水平滚动滑块位置
    		scrollPosition [1] = 50;        //表示滚动视图垂直滚动滑块位置
    	}
    
    
    	void OnGUI() {
    		//滚动条开始
    		scrollPosition = GUI.BeginScrollView(new Rect(0, 0, 200, 200),
    		                                     scrollPosition,new Rect(0, 0, Screen.width, Screen.height),true,true);
    
    		//滚动条中的内容
    		GUI.Button(new Rect(0, 0, 100, 20), "Top-left");
    		GUI.Button(new Rect(120, 0, 100, 20), "Top-right");
    		GUI.Button(new Rect(0, 180, 100, 20), "Bottom-left");
    		GUI.Button(new Rect(120, 180, 100, 20), "Bottom-right");
    		GUI.Label (new Rect(100,40,200,100),"测试滚动视图");
    
    		GUI.EndScrollView();        //结束滚动视图
    
            //显示滚动条滑块位置
    		GUI.Label (new Rect(300,40,100,100),scrollPosition.ToString());    
    	}
    }
    
     

    注意:GUI.BeginScrollView()方法与GUI.EndScrollView()方法必须成对出现,否则程序会抛出异常

     

    函数原型(JavaScript):

    1. public static function BeginScrollView(position:Rect, scrollPosition:Vector2, viewRect:Rect):Vector2;

    2. public static function BeginScrollView(position:Rect, scrollPosition:Vector2, viewRect:Rect, alwaysShowHorizontal:bool, alwaysShowVertical:bool, horizontalScrollbar:GUIStyle, verticalScrollbar:GUIStyle):Vector2;

    3. public static function EndScrollView():void;

    其中,position 为显示位置,scrollPosition 用于设置滚动条的起始位置,viewRect 用于设置滚动整体显示范围,EndScrollView 用于结束滚动视图内容。

    ScrollView 控件的参数如下表所示。
     

    参 数 功 能 参 数 功 能
    position 设置控件在屏幕上的位置及 大小 ScrollPosition 用来显示滚动位置
    viewRect 设置滚动整体显示范围 alwaysShowHorizontal 可选参数,总是显示水平 滚动条
    HorizontalScrollbar 设置用于水平滚动条的可选 GUI 样式 alwaysShow Vertical 可选参数,总是显示垂直 滚动条
    VerticalScrollbar 设置用于垂直滚动条的可选 GUI 样式    
    展开全文
  • Unity3D 无限滚动列表

    2019-01-09 14:48:28
    在游戏开发的过程中,会经常用到无限滚动列表做一些界面的展示,像排行榜,房间列表,好友列表,装备列表等等,GitHub有个非常好用的无限滚动列表,这个滚动列表是基于UGUI的,所以需要创建一个UGUI的ScrollRect,再...

    在游戏开发的过程中,会经常用到无限滚动列表做一些界面的展示,像排行榜,房间列表,好友列表,装备列表等等,GitHub有个非常好用的无限滚动列表,这个滚动列表是基于UGUI的,所以需要创建一个UGUI的ScrollRect,再把这个组件挂上去,移除原本的ScrollRect,根据提示赋值,虽然作者没做过多介绍,但是源码可以看得到,清晰明了,大概看下也就会用了,可以根据自己的需求作一些修改。

    这里有个坑要特意提一下,滚动列表的Item会根据窗口和自身大小自动调整最大个数,初始化时创建N个Item,然后不断的刷新自身的信息,交换Item的位置来达到无限滚动的效果而不是销毁重新创建;滑动的时候只有Item自身的编号发生变化时,才会重新执行OnItemRender,而不是它出现在你视野中时就会执行;这个问题会导致信息刷新不正确,所以最好是在信息发生改变的时候手动刷新数据。。。

     

    展开全文
  • Unity3d中,UGUI提供了 Scroll Rect、Grid Layout Group、Mask这三个组件,我们用来实现滚动视图,这里用一个简易的背包作为示例。

    Unity3d中,UGUI提供了 Scroll Rect、Grid Layout Group、Mask这三个组件,我们用来实现滚动视图。

    文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    首先我们放置好背包的底层方框,如下图。


    我们在红色的那一块,作为物品栏的滑动区域。   文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    接下来创建一个Panel ,改名为ScrollRectPanel,把大小拉动到红色方框大小。先Reset ,添加Scroll Rect 组件。勾选 Vertical 选框,意思是只有Y轴可以滑动。


    然后在 ScrollRectPanel 下面添加一个 Panel 作为 Child ,改名为 GridLayoutPanel ,先Reset ,拉伸宽度为 红框 宽度,高度稍微弄大一点 。添加 Grid Layout Group 组件。修改 颜色为红色 ,便于区分。 文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn



    然后 选择 ScrollRectPanel ,把GridLayoutPanel 拖到 Scroll Rect 的Content 中。  文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    运行测试一下,现在可以上下滑动了。   文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    然后在 GridLayoutPanel 下添加一个Button 作为 Child ,然后Ctrl + D 复制出 多个。文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    最后在 ScrollRectPanel 上 添加 Mask 组件,使超出 ScrollRectPanel 范围的不显示。文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    最后看看效果   文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn


    展开全文
  • Unity 3D循环滚动效果

    2017-07-25 14:50:36
    然后通过SetDepthAndPosition这个方法,实现图片的空间空间展开Z轴和Y轴,系数是一样的经过上面设置,空间就摆开了using UnityEngine; using System.Collections; using System.Collections.Generic;...

    这里写图片描述


    然后通过SetDepthAndPosition这个方法,实现图片的空间空间展开


    这里写图片描述



    这里写图片描述


    Z轴和Y轴,系数是一样的


    经过上面设置,空间就摆开了


    这里写图片描述



    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    
    public class SelectRole : MonoBehaviour {
        public GameObject rolesObj;
        private int _half = 0;//一侧的卡片数
        private int _movX = 150;//X轴移动距离
        private int _movY = 50;//Y轴移动距离
        private int _movZ = 60;//Z轴移动距离
        private int count = 3;//组件数
        private List<RoleItem> _roleList = new List<RoleItem>();
    
        // Use this for initialization
        void Start () {
            //加载图片
            Object[] textureList = (Object[])Resources.LoadAll("Pictures");
    
            int maxDepth = textureList.Length % 2 == 1 ? textureList.Length / 2 + 1 : textureList.Length / 2;//最大深度
            _half = maxDepth;      
    
            for (int i = 0; i < textureList.Length; i++)
            {            
                //加载角色图片预设
                GameObject role = Instantiate(Resources.Load("Role", typeof(GameObject))) as GameObject;            
                role.transform.parent = rolesObj.transform;
                role.transform.localScale = Vector3.one;
    
                EventDelegate.Add(role.GetComponent<UIToggle>().onChange , RoleToggleChange);
    
                RoleItem item = role.GetComponent<RoleItem>();            
                item.texture.mainTexture = textureList[i] as Texture;
    
                //设置角色卡片排序命名
                role.name = maxDepth.ToString();
                if (i > 0)
                {
                    //奇数设置为右边,下标为正数
                    if (i % 2 == 1)
                    {
                        maxDepth--;
                        role.name = maxDepth.ToString();
                    }
                    //偶数设置为左边,下标为负数
                    else
                    {
                        role.name = "-" + maxDepth.ToString();
                    }
                }
    
                SetDepthAndPosition(item,0,0);
                _roleList.Add(item);
            }        
        }
    
    
        private void SetDepthAndPosition(RoleItem role,int dir,int index)
        {
            int indexDepth = 0;
            //左右移动后,重新排序命名
            if (dir != 0)
            {
                if (index*dir > _half )
                    indexDepth = -dir * (_half - 1);
                else
                    indexDepth = index > -1 && index < 1 ? dir : index;
                role.name = indexDepth.ToString();  
            }        
            else
            {
                indexDepth = int.Parse(role.name);
            }
    
            TweenPosition tp = role.GetComponent<TweenPosition>();
            int x = indexDepth < 0 ? -(_half + indexDepth) * _movX : (_half - indexDepth) * _movX;
            indexDepth = System.Math.Abs(indexDepth);
            tp.to = new Vector3(x, (_half - indexDepth) * _movY, (_half - indexDepth) * _movZ);
    
    
            role.bg.depth = count * indexDepth;
            role.active.depth = 1 + count * indexDepth;
            role.texture.depth = 2 + count * indexDepth;      
    
            role.GetComponent<UIToggle>().value = indexDepth == _half ? true:false;
            tp.PlayForward();
        }
    
        /// <summary>
        /// 左边
        /// </summary>
        public void LeftClick()
        {
            //重新排列顺序
            foreach (RoleItem role in _roleList)
            {
                int index = int.Parse(role.name);
                print(index);
                SetDepthAndPosition(role,1,++index);
            } 
        }
    
        /// <summary>
        /// 右边
        /// </summary>
        public void RightClick()
        {
            //重新排列顺序
            foreach (RoleItem role in _roleList)
            {
                int index = int.Parse(role.name);
                SetDepthAndPosition(role,-1,--index);
            }
        }
    
        /// <summary>
        /// 鼠标选中某个角色
        /// </summary>
        public void RoleToggleChange()
        { 
            if(UIToggle.current.value)
            {
                int index = int.Parse(UIToggle.current.name);
                int moveCount = _half - System.Math.Abs(index);//移动个数
                for (int i = 0; i < moveCount;i++ )
                {
                    if (index > 0)
                        LeftClick();
                    else
                        RightClick();
                }           
            }
        }
    
    }



    FR:海涛高软(hunk Xu)

    展开全文
  • 1.在Canvas新建一个Panel,添加 scroll Rect和mask组件 2.Panel下新建一个Text,Vertical Overflow设置成Overflow,然后添加 Content Size Fitter这个Layout,该Layout的Vertical Fit设置为Perferred Size...
  • 在上一篇文章[Unity3D]Unity3D游戏开发之角色控制漫谈>一文中,博主与大家分享自己在角色控制方面的一些感悟。今天呢,我们继续来探讨Unity3D角色控制的内容,今天博主将解决在上一篇文章中没有解决的问题,即自由...
  • Unity3D 之UGUI 滚动条

    2019-01-13 20:31:03
    这里来说明下UGUI 滚动条,不涉及到代码。 主要用到的控件Scroll Rect ,Mask,Scrollbar。 第一步,建立一个Image,然后绑定一个滑动块的组件,添加一个mash组件,不然超过的部分会被显示出来。 第二部:...
  • 本课程主要介绍Unity3d的UI系统(UGUI),先对UGUI做一个总体概述,之后对每个UI控件逐一进行详细讲述,内容包括控件的作用、设置方法、使用场景及属性细节,帮助大家熟练使用UGUI设计游戏的交互界面。
  • 分享交流
  • 新发现github很好的一个ScrollView 无线滚动列表:https://github.com/garsonlab/ScrollView Scale Animation 最好设置为new AnimationCurve(new Keyframe[] {new Keyframe(0,0.5f), new Keyframe(1, 0.5f), new...
  • 原文链接:... 工具:Unity3d 2017.2.0f3 (64bit) 第一步:新建unity3d工程 第二步:在图中位置右键,新建一个Scroll View组件。 第三步:设置scrollView的宽和高 第四步:选中Content项...
  • 类似于网络游戏的商品切换滚动条,皮肤切换滚动条,自动居中离中心最近的Item,居中Item进行缩放,明暗变化。
  • 用处和目标:主要用作公告,文字比较多的可以弄个滚动条,鼠标上下拖动显示文字 步骤:1,canvas--UI---Image建立一个背景,随便弄个白色的图片拖到Image里。   说明:这个Image是最重要的了,文字要在他之下显示,...
  • Unity3D发布WEBGL播放视频 实现播放暂停 滚动条拖拽 重新播放功能 使用了https://download.csdn.net/download/dianmoliu/10436690?utm_source=bbsseo这位博友提供的插件,写了写大众化的控制方法,并且实现使视频...
  • Unity 3D 入门 介绍
  • 支持ScrollBar 支持反向滑动 支持了GridLayout 高效复用 (平台unity5.6.4)
  • 设置ScrollView的滚动条为隐藏的方法,scrollview滚动条 要实现ScrollView滚动条的隐藏,有两种方法, 一种是在XML的ScrollView布局中加入属性 android:scrollbars="none" 另一种则是在代码中获取...
1 2 3 4 5 ... 20
收藏数 1,273
精华内容 509
热门标签