体育彩票排列三试机号码: 着色器 (UGUI)键盘操作的UI列表 实现思路?

10
回复
1439
查看
打印 上一主题 下一主题
[ 复制链接 ]
7日久生情
2966/5000
排名
782
昨日变化

53

主题

760

帖子

2966

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
69941
好友
1
蛮牛币
8624
威望
0
注册时间
2015-1-20
在线时间
919 小时
最后登录
2019-4-23
60蛮牛币
Scroll Rect提供了便于鼠标滚动和拖拽的滚动列表功能,但对于只支持键盘操作的滚动列表没用提供支持,例如想实现下图这样一个列表,使用上下方向键选择,
列表一共有20项,但列表可视区域只显示6项,如何实现使用上下方向键选择时,当选中对象超出可视区域,列表中的项目自动滚动 使选中对象始终在可视区域中?




本帖被以下淘专辑推荐:

7日久生情
2966/5000
排名
782
昨日变化

53

主题

760

帖子

2966

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
69941
好友
1
蛮牛币
8624
威望
0
注册时间
2015-1-20
在线时间
919 小时
最后登录
2019-4-23
来自 2#
楼主 2018-6-29 12:34:36 只看该作者
本帖最后由 煮粥侠 于 2018-7-2 09:31 编辑

解决了,实现方法:

[C#] 纯文本查看 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Button_ScrollList : ButtonBase {
        
        RectTransform m_rect;
        RectTransform content;//包含所有项的父对象

        float Bound_Up,Bound_Down;//显示区域上下边界位置
        float offset;//Povit在中心时,偏移为每一项高度的一半

        protected override void Awake ()
        {
                base.Awake();
                m_rect=GetComponent<RectTransform>();
                content=transform.parent.GetComponent<RectTransform>();
                offset=m_rect.rect.height*0.5f;
                GetViewBound(content.parent);//可视区域为Content父对象,获取可视区域的上下边界
        }
        void GetViewBound(Transform viewTrans){
                RectTransform viewRect=viewTrans.GetComponent<RectTransform>();
                Bound_Up=viewRect.rect.yMax;
                Bound_Down=viewRect.rect.yMin;
        }

        //被选中时,检查当前位置是否超出了可视区域
        public override void OnSelect (UnityEngine.EventSystems.BaseEventData eventData)
        {
                base.OnSelect (eventData);
                CheckPos();
        }


        void CheckPos(){
                Vector2 bound= GetRectBoundPos();

                if(bound.x>Bound_Up){
                        Debug.Log(gameObject.name+"高于显示区域",gameObject);
                        MoveContent(0-m_rect.rect.height);//向下移动一项的高度

                }else if(bound.y<Bound_Down){
                        Debug.Log(gameObject.name+"低于显示区域",gameObject);
                        MoveContent(m_rect.rect.height);
                }
        }
                
        void MoveContent(float y){
                content.localPosition+=new Vector3(0f,y,0f);
        }

        Vector2 GetRectBoundPos(){
                Vector2 bound=Vector2.zero;

                float currPos=content.localPosition.y+m_rect.localPosition.y;
                bound.x=currPos+offset;//up
                bound.y=currPos-offset;//down

                return bound;
        }

}



排列三2014079期正版藏机图 www.d0po.cn 屏幕快照 2018-06-29 下午12.29.45.png (43.36 KB, 下载次数: 31)

屏幕快照 2018-06-29 下午12.29.45.png
2初来乍到
144/150
排名
17813
昨日变化

0

主题

28

帖子

144

积分

Rank: 2Rank: 2

UID
253985
好友
0
蛮牛币
411
威望
0
注册时间
2017-11-13
在线时间
80 小时
最后登录
2018-12-7
板凳
2018-6-29 12:20:47 只看该作者
煮粥侠 发表于 2018-6-29 12:34
我的思路是 每一项的OnSelect()时,判断自身位置与显示区域上/下边缘位置,如果超出,就使20项的parent整 ...

是像素,但是要注意scale值。
不一定需要比较边缘位置,只需要比较Text锚点和Content节点的位置关系,高度30锚点在左侧中心的Text和高度为900的ViewPort,那Text的localPosition在[-885,-15]是可见的
7日久生情
2966/5000
排名
782
昨日变化

53

主题

760

帖子

2966

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
69941
好友
1
蛮牛币
8624
威望
0
注册时间
2015-1-20
在线时间
919 小时
最后登录
2019-4-23
地板
楼主 2018-7-2 09:33:08 只看该作者
筑于梓 发表于 2018-7-2 09:20
是像素,但是要注意scale值。
不一定需要比较边缘位置,只需要比较Text锚点和Content节点的位置关系,高 ...

感谢大侠,已经自行解决了,方法已经贴出,你说得全对~
5熟悉之中
512/1000
排名
9869
昨日变化

2

主题

291

帖子

512

积分

Rank: 5Rank: 5

UID
282383
好友
0
蛮牛币
477
威望
0
注册时间
2018-5-23
在线时间
109 小时
最后登录
2018-8-20
5#
2018-7-2 18:59:08 只看该作者
duoxie fenxiang, duoxie fengxiang
6蛮牛粉丝
1169/1500
排名
2333
昨日变化

1

主题

160

帖子

1169

积分

Rank: 6Rank: 6Rank: 6

UID
236305
好友
1
蛮牛币
1639
威望
0
注册时间
2017-8-7
在线时间
400 小时
最后登录
2019-4-22
6#
2018-7-3 11:22:35 只看该作者
学习学习~~~
4四处流浪
339/500
排名
28925
昨日变化

0

主题

248

帖子

339

积分

Rank: 4

UID
183390
好友
0
蛮牛币
197
威望
0
注册时间
2016-11-14
在线时间
79 小时
最后登录
2019-3-28
7#
2018-7-9 10:31:59 只看该作者
来看看 学习学习
4四处流浪
327/500
排名
7869
昨日变化

0

主题

106

帖子

327

积分

Rank: 4

UID
291750
好友
1
蛮牛币
552
威望
0
注册时间
2018-7-30
在线时间
63 小时
最后登录
2019-2-21
8#
2018-8-21 14:08:29 只看该作者
厉害了
4四处流浪
327/500
排名
7869
昨日变化

0

主题

106

帖子

327

积分

Rank: 4

UID
291750
好友
1
蛮牛币
552
威望
0
注册时间
2018-7-30
在线时间
63 小时
最后登录
2019-2-21
9#
2018-10-18 14:04:24 只看该作者
UGUI挺住啊
3偶尔光临
250/300
排名
9014
昨日变化

1

主题

51

帖子

250

积分

Rank: 3Rank: 3Rank: 3

UID
241825
好友
0
蛮牛币
643
威望
0
注册时间
2017-9-6
在线时间
72 小时
最后登录
2019-4-22
10#
2018-12-6 09:42:11 只看该作者
学习学习!
4四处流浪
327/500
排名
7869
昨日变化

0

主题

106

帖子

327

积分

Rank: 4

UID
291750
好友
1
蛮牛币
552
威望
0
注册时间
2018-7-30
在线时间
63 小时
最后登录
2019-2-21
11#
2018-12-25 16:47:22 只看该作者
UGUI时代马上到了.让自己多多加强
您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

  • 您访问的页面找不回来了 2019-04-07
  • 五莲科技局以“三大”助力动能转换 2019-04-07
  • 匹夫有责之一百一十二—道义大义的博客—强国博客—人民网 2019-03-30
  • 守住青山不放松 护好绿水不辞难——在渝全国人大代表聚焦“共抓大保护、不搞大开发”专题调研记略 2019-03-28
  • 经营者要想“我心换你心”,就要未雨绸缪,让不诚信的诱惑少一点,如此才能在市场中生存下来。反过来说,承担不起亏损就关门歇业,是否也是一种不诚信呢? 2019-03-21
  • 追风上市公司“跌落神坛”-热门标签-华商网数码 2019-03-21
  • 文化艺术交易场所沙龙第一期活动在京顺利举行 2019-03-16
  • 看把你高兴的屁颠屁颠的,光有赞有什么用?我给你个货真价实的 [大红包]。 2019-03-16
  • 候选企业:中国石油呼和浩特石化公司 2019-02-22
  • 我国纳米核心技术取得重大突破 2019-02-22
  • 北京:端午节民俗地图  小枣粽——竹叶红枣糯糯情  2019-01-26
  • 机器人送快递将在西安试点 识别红绿灯还能“车让人” 2019-01-26
  • 首批限竞房正式入市 戳三大盘看详情! ——凤凰网房产北京 2018-12-09
  • 世界杯频爆冷门网友大呼“天台见”!警方:不要冲动,不要跳楼 2018-08-21
  • 始终如一的是:美国优先。 2018-08-21
  • 202| 627| 982| 638| 161| 372| 216| 436| 392| 900|