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组件)实现类似头条效果的横向滚动导航条