Unity 大地图滑动与缩放

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

目录

1.UGUI实现大地图滚动与缩放

2.Sprite Renderer实现大地图滑动与缩放


1.UGUI实现大地图滚动与缩放

unity地图滚动,Unity,UGUI拖拽,Sprite 拖拽,大地图拖拽,unity 拖拽

 unity地图滚动,Unity,UGUI拖拽,Sprite 拖拽,大地图拖拽,unity 拖拽

 如图,大地图尺寸是超出屏幕1920*1080的,我们使用ScrollView实现大地图滑动

unity地图滚动,Unity,UGUI拖拽,Sprite 拖拽,大地图拖拽,unity 拖拽

unity地图滚动,Unity,UGUI拖拽,Sprite 拖拽,大地图拖拽,unity 拖拽

 ⚠️注意:camera使用 Perspective

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UiScale : MonoBehaviour
{
    public ScrollRect bgScroll;

    private float lastDis = 0;
    private float cameraDis = 0;

    void Start()
    {

    }

    private void OnEnable()
    {
    }

    void Update()
    {
        if (Input.touchCount > 1)
        {
            bgScroll.horizontal = false;
            bgScroll.vertical = false;
            Touch t1 = Input.GetTouch(0);
            Touch t2 = Input.GetTouch(1);
            if (t2.phase == TouchPhase.Began)
            {
                lastDis = Vector2.Distance(t1.position, t2.position);
            }
            else
            if (t1.phase == TouchPhase.Moved && t2.phase == TouchPhase.Moved)
            {
                float dis = Vector2.Distance(t1.position, t2.position);
                if (Mathf.Abs(dis - lastDis) > 1)
                {
                    if (dis != lastDis)
                    {
                        if (dis < lastDis)
                        {
                            if (cameraDis != 0)
                            {
                                cameraDis += 10;
                                cameraDis = Mathf.Clamp(cameraDis, -50, 0);
                                lastDis = dis;
                            }
                        }
                        else
                        {
                            if (cameraDis != -50)
                            {
                                cameraDis -= 10;
                                cameraDis = Mathf.Clamp(cameraDis, -50, 0);
                                lastDis = dis;
                            }
                        }
                    }
                }
            }
        }
        else
        {
            bgScroll.horizontal = true;
            bgScroll.vertical = true;
        }

        if (Input.mouseScrollDelta.y != 0)
        {
            if (Input.mouseScrollDelta.y > 0)
            {
                cameraDis -= 10;
                cameraDis = Mathf.Clamp(cameraDis, -50, 0);
            }
            else
            {
                cameraDis += 10;
                cameraDis = Mathf.Clamp(cameraDis, -50, 0);
            }
        }

        if (Input.GetKeyDown(KeyCode.Escape))
        {
            Application.Quit();
        }
    }

    private void LateUpdate()
    {
        if (this.transform.position.z == cameraDis) { return; }
        this.transform.position = new Vector3(this.transform.position.x, this.transform.position.y, cameraDis);
    }

}

2.Sprite Renderer实现大地图滑动与缩放

unity地图滚动,Unity,UGUI拖拽,Sprite 拖拽,大地图拖拽,unity 拖拽

 unity地图滚动,Unity,UGUI拖拽,Sprite 拖拽,大地图拖拽,unity 拖拽

unity地图滚动,Unity,UGUI拖拽,Sprite 拖拽,大地图拖拽,unity 拖拽

 ⚠️注意:Camera使用Orthographic文章来源地址https://www.toymoban.com/news/detail-677231.html

using UnityEngine;

public class SpriteBgContr : MonoBehaviour
{
    public Camera _camera;

    private Vector3 oriMousePos;
    private Vector3 oriPos;

    private int curDis = 3;
    private float lastDis = 0;

    void Start()
    {

    }

    void Update()
    {

    }

    private void OnMouseDown()
    {
        oriMousePos = Input.mousePosition;
        oriPos = _camera.transform.position;
    }

    private void OnMouseDrag()
    {
        if (Input.touchCount > 1)
        {
            Touch t1 = Input.GetTouch(0);
            Touch t2 = Input.GetTouch(1);
            if (t2.phase == TouchPhase.Began)
            {
                lastDis = Vector2.Distance(t1.position, t2.position);
            }
            else
            if (t1.phase == TouchPhase.Moved && t2.phase == TouchPhase.Moved)
            {
                float dis = Vector2.Distance(t1.position, t2.position);
                if (Mathf.Abs(dis - lastDis) > 1)
                {
                    if (dis != lastDis)
                    {
                        if (dis < lastDis)
                        {
                            if (curDis < 3)
                            {
                                curDis += 1;
                                curDis = Mathf.Clamp(curDis, 1, 3);
                                lastDis = dis;
                            }
                        }
                        else
                        {
                            if (curDis > 1)
                            {
                                curDis -= 1;
                                curDis = Mathf.Clamp(curDis, 1, 3);
                                lastDis = dis;
                            }
                        }
                    }
                }
            }
        }
        else
        {
            var offsetX = _camera.ScreenToWorldPoint(Input.mousePosition).x - _camera.ScreenToWorldPoint(oriMousePos).x;
            var offsetY = _camera.ScreenToWorldPoint(Input.mousePosition).y - _camera.ScreenToWorldPoint(oriMousePos).y;
            _camera.transform.position = new Vector3(Mathf.Clamp(oriPos.x - offsetX, -4, 4), Mathf.Clamp(_camera.transform.position.y - offsetY, -2, 2), -10);
        }
    }

    private void LateUpdate()
    {
        if (_camera.fieldOfView == curDis) { return; }
        _camera.orthographicSize = curDis;
    }
}

到了这里,关于Unity 大地图滑动与缩放的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • UGUI-Unity滚动文本设计

    目录 前言 一、设计步骤 1.在Hierarchy窗口右键UI,创建Image  2.在NoteBG下创建Text文本框,并添加文字内容  3.在NoteBG下创建新的Image  4.在TextBG上添加Unity自带的脚本Scroll Rect和Mask 5.在NoteBG下添加滚轮Scrollbar 6.将Scrollbar组件挂载到TextBG组件中Scroll Rect脚本的Vertiacl Scrollbar属性 滑动

    2024年02月08日
    浏览(44)
  • Unity UGUI制作字幕滚动效果,长字幕左右来回滚动

    效果: 描述: 当文字长度小于边框时保持在边框的中间,长度大于边框时来回滚动 使用时调用此方法: 创建: 创建一个Image并调整大小 在Image下创建Text并调整Text的大小,颜色等参数 将TextScroll 挂载到Image上并调整TextScroll参数 代码使用了动态添加组件,确保组件能正常使用

    2024年02月07日
    浏览(46)
  • Unity UGUI的CanvasScaler(画布缩放器)组件的介绍及使用

    CanvasScaler是Unity中UGUI系统中的一个组件,用于控制画布的缩放和适配。通过CanvasScaler组件,可以实现UI界面在不同分辨率下的自适应显示。 CanvasScaler组件通过调整画布的缩放比例,使UI元素在不同分辨率下保持一致的显示效果。它根据设定的参考分辨率和屏幕分辨率的比例,

    2024年02月16日
    浏览(41)
  • Unity实现一个可扩展的UGUI无限滑动列表控件

    12月20日新增 增加一个可收缩的滑动列表,适用于游戏中的任务系统,成就等 使用说明 创建时需要两个模板slot,一个是button,另一个则是btn下显示的cell 配置如下图添加 ExpandableView 脚本,新增的IsDefaultExpand用来控制是否展开 11月28日新增 增加可调节的顶部间隙和左侧间隙 采

    2024年01月19日
    浏览(38)
  • Unity UGUI文本内容自适应大小和内容滚动

    要实现UGUI文本内容自适应大小和内容超出一定范围就自动出现滚动条实现滚动,具体需要如下操作。 1、创建Scrooll View组件 只勾选Vertical。 并且在组件子组件Content中创建Vertical Layout Group和Content Size Fitter组件,如下图所示, 然后在Content组件下,创建文本文件,如下图 最后就是

    2024年02月04日
    浏览(39)
  • Unity UGUI的Slider(滑动条)件组的介绍及使用

    Slider(滑动条)是Unity UGUI中的一种常用UI组件用,于在用户界面中实现滑动选择的功能。通过拖动滑块,用户可以选择一个数值范围的内值。 Slider组件由两部分组成:滑动区域和滑块。滑动区域用于显示滑动条的背景,而滑块则表示当前的数值位置。用户可以通过拖动滑块来

    2024年02月11日
    浏览(38)
  • 【Unity-UGUI控件全面解析】| Slider 滑动条组件详解

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

    2024年02月12日
    浏览(49)
  • Unity UGUI的ScrollRect(滚动视图)组件的介绍及使用

    ScrollRect(滚动视图)是Unity UGUI中的一个常用组件,用于在UI界面中创建可滚动的区域。通过ScrollRect组件,可以实现在有限的空间内显示大量的内容,并且可以通过滑动手势来浏览内容。 ScrollRect组件通过将内容放置在一个可滚动的矩形区域内,然后通过拖动或滑动手势来改变

    2024年02月09日
    浏览(48)
  • Unity UGUI的Scrollbar(滚动条)组件的介绍及使用

    Scrollbar组件是Unity中UGUI系统提供的一种UI组件,主要用于在UI界面中提供滚动条功能,使用户可以通过滚动条来查看超出屏幕范围的内容。 Scrollbar组件的工作原理主要是通过改变滚动条的位置来改变关联的内容的显示位置。当用户拖动滚动条时,Scrollbar组件会根据滚动条的位

    2024年02月13日
    浏览(40)
  • 【Unity-UGUI控件全面解析】| Scrollbar 滚动条组件详解

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

    2024年02月06日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包