unityscrollview自己移动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unityscrollview自己移动相关的知识,希望对你有一定的参考价值。

Yitan-
关注
创建ScrollView 在Content中创建4个ABCD图片分别放于4个角落

场景
给ScrollView 挂上ScrollViewNevigation脚本

ScrollView
创建GM控制移动

代码 

ScrollViewNevigation部分 (用到了DoTween 在AssteStore下载导入即可)

using UnityEngine;

using DG.Tweening;

using UnityEngine.UI;

public class ScrollViewNevigation : MonoBehaviour



    public static ScrollViewNevigation instance;

    [Header("移动时间")]

    public float _speedTime=0;

    private ScrollRect scrollRect;

    private RectTransform viewport;

    private RectTransform content;

    

    private void Awake()

   

        instance = this;

   

    void Start()

   

        Init();

   

    private void Init()

   

        if (scrollRect == null)

       

            scrollRect = this.GetComponent<ScrollRect>();

       

        if (viewport == null)

       

            viewport = this.transform.Find("Viewport").GetComponent<RectTransform>();

       

        if (content == null)

       

            content = this.transform.Find("Viewport/Content").GetComponent<RectTransform>();

       

   

    public void Nevigate(RectTransform item)

   

        Vector3 itemCurrentLocalPostion = scrollRect.GetComponent<RectTransform>().InverseTransformVector(ConvertLocalPosToWorldPos(item));

        Vector3 itemTargetLocalPos = scrollRect.GetComponent<RectTransform>().InverseTransformVector(ConvertLocalPosToWorldPos(viewport));

        Vector3 diff = itemTargetLocalPos - itemCurrentLocalPostion;

        diff.z = 0.0f;

        var newNormalizedPosition = new Vector2(

            diff.x / (content.GetComponent<RectTransform>().rect.width - viewport.rect.width),

            diff.y / (content.GetComponent<RectTransform>().rect.height - viewport.rect.height)

            );

        newNormalizedPosition = scrollRect.GetComponent<ScrollRect>().normalizedPosition - newNormalizedPosition;

        newNormalizedPosition.x = Mathf.Clamp01(newNormalizedPosition.x);

        newNormalizedPosition.y = Mathf.Clamp01(newNormalizedPosition.y);

        DOTween.To(() => scrollRect.GetComponent<ScrollRect>().normalizedPosition, x => scrollRect.GetComponent<ScrollRect>().normalizedPosition = x, newNormalizedPosition, _speedTime);

   

    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;

        return target.parent.TransformPoint(localPosition);

   



GameManager部分 把Content的4个图片ABCD分别拖拽赋值给imgA imgB imgC imgD即可

public class GameManager : MonoBehaviour



    public Image imgA;

    public Image imgB;

    public Image imgC;

    public Image imgD;

    void Start()

   

        

   

    // Update is called once per frame

    void Update()

   

        if(Input.GetKeyDown(KeyCode.A))

       

            ScrollViewNevigation.instance.Nevigate(imgA.rectTransform);

       

        if (Input.GetKeyDown(KeyCode.B))

       

            ScrollViewNevigation.instance.Nevigate(imgB.rectTransform);

       

        if (Input.GetKeyDown(KeyCode.C))

       

            ScrollViewNevigation.instance.Nevigate(imgC.rectTransform);

       

        if (Input.GetKeyDown(KeyCode.D))

       

            ScrollViewNevigation.instance.Nevigate(imgD.rectTransform);

       

   



运行Unity 分别按键盘ABCD即可移向指定图片 可以在ScrollViewNevigation中修改_speedTime来修改移动速度

本文禁止转载或摘编

2
收藏
分享
推荐文章
对“广义单道具”事件的态度
单机游戏 · 97阅读
汽车研究院-第105期
单机游戏 · 16阅读
【丹莫图书馆】 · 匕落城盟约导览
单机游戏 · 9阅读
热门评论(0)

请先登录后发表评论 (・ω・)
表情发布
看看下面~来发评论吧
参考技术A 1.在Unity3D中,使用ScrollView时,

经常需要让游戏在运行时,将ScrollView定位到某一指定Item上。

比如:进入游戏后,在关卡界面大地图推图指当前关卡等。

脚本ScrollViewNevigation.cs 则可以实现此功能。

2. 使用说明

请尽量保证ScrollView组件层级及命名如下,为减少使用者拖拽工作量,在代码中已根据层级和命名初始化完毕

以上是关于unityscrollview自己移动的主要内容,如果未能解决你的问题,请参考以下文章

移动端丨-webkit-overflow-scrolling:touch属性导致页面卡住

vue+better-scroll实现左右菜单联动效果(移动端)

Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条

通过overflow: scroll;来实现部分区域的滚动

jQuery window.scroll 向相反方向垂直移动 div

JavaScript Mootools:Fx.Scroll将页面移动到顶部