unity scrollview滚动到指定的位置

这篇具有很好参考价值的文章主要介绍了unity scrollview滚动到指定的位置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方法一:通过下标
方法二:原文1 原文2

方法一没测试
这里给方法二增加注释理解

	public void Nevigate(RectTransform item)
    {
 		// InverseTransformPoint: Transforms position from world space to local space, 和TransformPoint左右相反
 		// 这步的意义是把 item、viewport的localPosition转换到同一个父节点下,才能计算出需要移动的差值
 		// 看图1
        Vector3 itemCurrentLocalPostion = scrollRect.GetComponent<RectTransform>().InverseTransformPoint(ConvertLocalPosToWorldPos(item));
        Vector3 itemTargetLocalPos = scrollRect.GetComponent<RectTransform>().InverseTransformPoint(ConvertLocalPosToWorldPos(viewport));
 		// 计算需要移动的距离
        Vector3 diff = itemTargetLocalPos - itemCurrentLocalPostion;
        
 		// 当第一个item处于viewport最上时 verticalNormalizedPosition = 0,处于最左时 horizontalNormalizedPosition = 0,看图2
 		
 		// 计算需要移动的距离占的比,即需要移动的距离占可移动长度的百分比,看图3
 		// 如果你的 viewport 中只能显示一个item的话,这样就行了,但是超过了1个的话需要计算偏移:
 		// 以数值方向为例,当verticalNormalizedPosition = 0,第一个 item 距离 viewport的中心位置其实有一段距离的,
 		// 所以要减去这段距离,diff.y - offset,再计算 newNormalizedPosition,看图4
        var newNormalizedPosition = new Vector2(
            diff.x / (content.GetComponent<RectTransform>().rect.width - viewport.rect.width),
            diff.y / (content.GetComponent<RectTransform>().rect.height - viewport.rect.height)
            );
 		// 当时 normalizedPosition - 需要移动的占比newNormalizedPosition,得到最终的位置normalizedPosition
        newNormalizedPosition = scrollRect.GetComponent<ScrollRect>().normalizedPosition - newNormalizedPosition;
 
        newNormalizedPosition.x = Mathf.Clamp01(newNormalizedPosition.x);
        newNormalizedPosition.y = Mathf.Clamp01(newNormalizedPosition.y);
 		// 也可以只设置水平方向 horizontalNormalizedPosition,或竖直方向 verticalNormalizedPosition
 		// 设置 normalizedPosition 等于同时设置 horizontalNormalizedPosition, verticalNormalizedPosition
 		// normalizedPosition.x == horizontalNormalizedPosition
 		// normalizedPosition.y == verticalNormalizedPosition
 		// normalizedPosition == new Vector2(horizontalNormalizedPosition, verticalNormalizedPosition)
        scrollRect.GetComponent<ScrollRect>().normalizedPosition = newNormalizedPosition;
		
		// 如果有分类功能,比如点击type1,scrollview中显示type1中的数据,点击type2,scrollview中显示type2中的数据,需要在给 
		// normalizedPosition 赋值前先赋值 (0, 0),否则最后一行代码获取的 normalizedPosition 还是上一类型 type 中的 
		// normalizedPosition,导致出bug
    }
 	
 	// 这个方法的作用是消除Pivot数值的影响,Pivot不是(0.5,0.5)时,最后所计算出来的结果会有误差
 	// 如果是(0.5, 0.5)的话可以直接返回 target.parent.TransformPoint(localPosition)
    private Vector3 ConvertLocalPosToWorldPos(RectTransform target)
    {
        var pivotOffset = new Vector3(
            (0.5f - target.pivot.x) * target.rect.size.x,
            (0.5f - target.pivot.y) * target.rect.size.y,
            0f);
 
        var localPosition = target.localPosition + pivotOffset;
 		// TransformPoint: Transforms position from local space to world space
        return target.parent.TransformPoint(localPosition);
    }

unity scrollview滚动到指定位置,Unity,c#,unity,c#

图1

unity scrollview滚动到指定位置,Unity,c#,unity,c#

图2

unity scrollview滚动到指定位置,Unity,c#,unity,c#

图3

unity scrollview滚动到指定位置,Unity,c#,unity,c#文章来源地址https://www.toymoban.com/news/detail-808550.html

图4

到了这里,关于unity scrollview滚动到指定的位置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity ScrollView循环滚动播放(有详细注释)

    首先创建一个ScrollView在UI上 在Content上挂载脚本,将ScrollView赋值给Parent。 当Content的高度大于ScrollView的容量高度时便开始滚动。 以下是脚本代码: 效果如下(结尾和开头会停留1秒):

    2024年02月07日
    浏览(40)
  • 【Unity-UGUI控件全面解析】| ScrollView 滚动视图组件详解

    🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN 🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:

    2024年02月06日
    浏览(48)
  • 【Unity3D-UGUI系列】(十二)ScrollView 滚动视图组件详解

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 首先,介绍一个UGUI,NGUI是UGUI的前身,Unity开发团队将NGUI的开发团队收到自己开发团队

    2024年02月05日
    浏览(49)
  • Swift 让ScrollView滚动到具体某个位置

    1. 使用 scrollToItem 方法滚动集合视图 上述代码中,首先使用 scrollToItem 方法将集合视图滚动到第一条数据(左侧对齐),然后在稍后的延迟时间后,再次使用 scrollToItem 方法将其滚动到最后一条数据(左侧对齐)。 2. 使用 setContentOffset 方法来滚动集合视图 上述代码中,我们使

    2024年02月15日
    浏览(37)
  • unity物体移动至指定位置

    在Unity中,物体的坐标分为 局部坐标 和 世界坐标 。 局部坐标是相对于物体的父对象的坐标系,而世界坐标是相对于场景的整体坐标系。 举个例子 将下面代码挂载到Sphere上 输出结果如下 如果想让物体运动到指定的位置,通常情况下是参考世界坐标系。因为世界坐标系是整

    2024年02月05日
    浏览(48)
  • Unity中拖拽3D物体并放入到指定位置

    1.新建一个cube作为我们用来拖拽的物体:  2.给该cube添加我们刚刚编写的脚本: 3.场景中新建几个cube命名为Taget3D,摆在不同的位置并将这些新的cube传入到ListTartgets中:    4.新建几个Image命名为TargetUI,放在不同的位置并传入到ListUITarget中 : 5.新建两个Button分别对应传入buttonU

    2024年02月11日
    浏览(91)
  • Unity虚拟相机Cinemachine-实现相机自动移动到指定位置

    介绍两种方法, 第一种使用虚拟相机自带DollyCart和DollyTrack进行设置; 第二种使用时间线Timeline和DollyTrack进行设置 1.首先添加图中三个虚拟相机 2.点击 DollyTrack,添加点,设置轨道 3.调整点的位置,使轨道在相机移动的起点和终点保持平滑 4.设置Dolly Cart,将轨道拖拽到Dolly

    2024年01月25日
    浏览(44)
  • Unity开发笔记:截取指定位置含有UI的场景截图并输出

    学习记录整理,自用,也希望能帮助到有相同需求的人。 如果直接截全图: 截取指定位置含有UI的场景截图: 例如这种情况下只想要中间的: UI所在的Canvas设置为RenderMode.ScreenSpaceCamera并挂载相机,然后设置该相机的渲染RenderTexture并开始render,注意这里渲染是从屏幕中心扩展

    2024年02月13日
    浏览(36)
  • Unity2D 实现UGUI滚动鼠标滑轮以鼠标位置点为中心缩放图片

     先放参考文章: Unity3d UGUI以鼠标位置点为中心缩放图片(含项目源码) https://blog.csdn.net/qq_33789001/article/details/117749837 再放实现效果: 说说事情缘由,项目需要用到这个效果,所以上网找了个参考文章,后来不知道为什么失效了,所以想着自己改改,看看是什么毛病。 贴原

    2024年02月11日
    浏览(48)
  • Unity 之transform.LookAt() 调整一个物体的旋转,使其朝向指定的位置

    transform.LookAt 是 Unity 引擎中 Transform 组件的一个方法,用于调整一个物体的旋转,使其朝向指定的位置。通常情况下,它被用来使一个物体(如摄像机、玩家角色等)朝向另一个物体、位置或方向。以下是关于 transform.LookAt 方法的详细介绍: 方法签名: 参数说明: target :要

    2024年02月09日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包