首页 > 其他分享 >[Unity]在TileMap上控制Camera移动、缩放

[Unity]在TileMap上控制Camera移动、缩放

时间:2024-11-20 16:44:38浏览次数:3  
标签:Vector3 缩放 TileMap float bounds private Unity Camera bool

环境:

  1. unity2021.3.14f1c1
  2. Camera类型Orthographic
  3. TileMap为XY方向摆放

功能:

  1. 单点触摸或鼠标操作移动Camera。
  2. 使用BoxCollider2D控制地图范围。
  3. 鼠标滚轮或多点触摸控制缩放。
  4. 缩放维持中心点在屏幕的固定位置。

代码:

using System;
using UnityEngine;

public class TileMapCameraController : MonoBehaviour
{
    [SerializeField]
    GameObject targetMap;
    [SerializeField]
    Camera targetCam;

    private bool enableControl = true;
    private float camInitSize = 20;
    private float camMinSize = 5;
    private float camMaxSize = 30;
    private float camSizeScrollWheelV = 10;

    private Vector2 firstTouchPos;
    private Vector2 cameraFirstPos;
    private bool isMoving = false;
    private bool isBegan = false;
    private bool isOnScale = false;
    private float camOriginZ = 0;
    private Vector3 mapMin;
    private Vector3 mapMax;
    private Vector3 camNewPos = new Vector3();

    // 双触点初始距离
    private float baseDis;
    // 双触点初始中心
    private Vector2 baseMidScreen;
    // 双触点初始中心
    private Vector3 baseMidWorld;
    // 双触点初始镜头size
    private float baseSize;
    private float baseScale = 1;

    void Awake()
    {
        Init();
    }

    private void Init()
    {
        if (targetMap)
        {
            var bounds = targetMap.GetComponent<BoxCollider2D>().bounds;
            mapMax = bounds.max;
            mapMin = bounds.min;
        }
        if (targetCam)
        {
            targetCam.orthographicSize = camInitSize;
            c

标签:Vector3,缩放,TileMap,float,bounds,private,Unity,Camera,bool
From: https://blog.csdn.net/GrimRaider/article/details/143919354

相关文章

  • Unity图形学之Surface 片段着色器
    1.结构:经常在片段着色器里做一些UV变换#pragmasurfacesurfLambertfinalColor:mycolorvertex:myvert2.InputStruct 成员变量:(1)Uv+纹理变量的名字structInput{float2uv_MainTex;};(2)还有其他的:3.片段着色器的输出:inout......
  • Unity新导航系统---NavMeshObstacle组件
    系列文章目录Unity新导航系统—NavMeshObstacle组件文章目录系列文章目录前言NavMeshObstacle组件前言NavMeshObstacle组件:用于在场景中定义动态障碍物,来影响导航主体(NavMeshAgent)的路径选择。这是我的学习笔记,记载的是NavMeshObstacle组件的用法和各......
  • Unity新导航系统---NavMeshAgent组件&NavMeshLink组件
    系列文章目录Unity新导航系统—NavMeshAgent组件&NavMeshLink组件文章目录系列文章目录前言NavMeshAgent组件NavMeshLink组件前言NavMeshAgent组件:用于控制游戏对象(如角色、AI等)在导航网格(NavMesh)上的移动和路径寻找。NavMeshLink组件:用于创建两个导航......
  • unity 在PICO中显示实景,虚实结合
    环境要求PICO设备型号:PICONeo3、PICO4和PICO4Ultra系列。在不同型号的设备上,视频透视画面的色调和清晰PICO设备系统版本:5.11.0及以上 必要条件:1.需禁用场景内的所有后处理能力,否则透视无法生效。2.若你在项目中使用了Vulkan和通用渲染管线(URP),则需......
  • unity 3D音 发布PICO后出现问题的解决方法
    发声物体:将AudioSource设置为2D音然后在发声物体上挂载PXR_Audio_Spatializer_AudioSource  收声物体:除了挂载AudioListener外还需要挂载PXR_Audio_Spaializer_AudioListener 此外,还可以找个合适的位置挂载一个PXR_Au......
  • 在Unity实现《Farcry5》 GPU地形
    【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!一、需求背景开放大世界渲染中,地形的渲染占比较重,包括开发投入、表现效果及性能开销等。而地形Shader部分的性能优化已经做过多版了,但Mesh的部分还......
  • MFC CChartCtrl 滚轮缩放
    原文来自:MFC그래프라이브러리,ChartCtrl마우스휠기능추가BOOLCChartCtrl::OnMouseWheel(UINTnFlags,shortzDelta,CPointpt){ScreenToClient(&pt);doubleMinVal=0;doubleMaxVal=0;doublerate=0.1;if(m_bZoomEnabled){......
  • 在Unity中使用Epplus写Excel
    Overview    本文旨在帮助你快速入门,该库发展多年内容庞大(官方文档写的极好:https://github.com/EPPlusSoftware/EPPlus/wiki),有些功能在Unity环境可能你永远都不会使用.官方的一个Demo:https://github.com/EPPlusSoftware/EPPlus.Samples.CSharp如果你只有读的......
  • Unity实现鼠标框选功能
    usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;publicclassDrawRect:MonoBehaviour{publicstaticDrawRectInstance;publicDrawRect(){Instance=this;}......
  • 【Unity】ScriptableObject的应用和3D物体跟随鼠标移动:鼠标放置物体在场景中
    需求说明结合前篇,仓库管理和获取鼠标点击的世界坐标位置两篇内容,已经实现了:鼠标或键盘控制玩家移动;玩家触碰物体后,将物体放入仓库;鼠标点击仓库栏中的物体,任意放在空间中的功能。接下来想要实现:鼠标点击仓库栏的物体之后,物体会跟随鼠标移动;键盘控制待放置的......