Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
  • Help Room /
avatar image
0
Question by KwinkyWolf · May 24, 2020 at 06:05 PM · scripting problemuimap

Single Image Map Pan/Zoom & Coordinates

Hello to whomever may be reading this,

I'm currently working on a mobile game that has a map integration and the map i've got consists of a single image (Converted to Sprite in Unity on import). I have this, currently, set as an image component of a Panel which is toggled on and off with a button.

This all being well and good, I can't find the best way to provide zoom and pan functionality around the map.

I'd like the player to be able to use one finger to slide and pan across the map, and pinch two fingers together to zoom in or out. This is something i've seen done, and there's of course ways i've found to apply this to a 3D environment, however i'm unsure as to whether that's the best practise within the 'map mode' as i've aptly named it.

Then comes my second obstacle, which is the placing of waypoints and key points of interest. This, however, I have deemed may be best to do by utilising some form of data type such as an array, list e.t.c. or even a json file with multiple parameters for each waypoint, being; Image, Coordinates, Name and so on. However, again, is this the best way to go about this? And if so, what's the best way to calculate the coordinates of the image? Should I use pixel coordinates?

Thank you so much,

Kye Jones :)

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by KwinkyWolf · May 25, 2020 at 05:47 PM

Alright, so after a bit of fiddling around I've solved half of this question with this lot of code...

  using UnityEngine;
  using UnityEngine.UI;
  
  public class MapMove : MonoBehaviour
  {
      public GameObject panel; // The panel
      public float zoomSpeed;        // The rate of change of the canvas scale factor
      public float min;
      public float max;
      public Vector2 screenSize;
 
      void Start()
      {
         screenSize = new Vector2(Screen.width, Screen.height);
      }
      
      void Update()
      {
          // Zooming
          if (Input.touchCount == 2)
          {
              // Store both touches.
              Touch touchZero = Input.GetTouch(0);
              Touch touchOne = Input.GetTouch(1);
  
              // Find the position in the previous frame of each touch.
              Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
              Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;
  
              // Find the magnitude of the vector (the distance) between the touches in each frame.
              float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude;
              float touchDeltaMag = (touchZero.position - touchOne.position).magnitude;
  
              // Find the difference in the distances between each frame.
              float deltaMagnitudeDiff = prevTouchDeltaMag - touchDeltaMag;
  
              // Create new Vector3 for the change
              Vector3 difference = new Vector3();
              difference.x = deltaMagnitudeDiff * zoomSpeed;
              difference.y = deltaMagnitudeDiff * zoomSpeed;
              difference.z = deltaMagnitudeDiff * zoomSpeed;
 
              // ... change the canvas size based on the change in distance between the touches.
              panel.transform.localScale -= difference;
 
              // Clamp the scale
              panel.transform.localScale = new Vector3(
                 Mathf.Clamp(panel.transform.localScale.x, min, max),
                 Mathf.Clamp(panel.transform.localScale.y, min, max),
                 1
              );
 
          }
 
         // Panning
         if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
         {
             Vector3 touchDeltaPosition = Input.GetTouch(0).deltaPosition;
 
             panel.transform.position -= touchDeltaPosition;
 
             Vector2 imageSize = panel.GetComponent<RectTransform>().sizeDelta;
             imageSize = panel.transform.localScale * imageSize;
 
 
 
 
             // Clamp the location
             float minX = -Mathf.Abs((imageSize.x / 2) / 2);
             float maxX = Mathf.Abs((imageSize.x / 2) / 2);
             float minY = -Mathf.Abs((imageSize.y / 2) / 2);
             float maxY = Mathf.Abs((imageSize.y / 2) / 2);
 
             Vector3 newSlide = panel.GetComponent<RectTransform>().anchoredPosition;
 
              if (newSlide.x >= maxX) {
                 newSlide.x = maxX;
                 panel.GetComponent<RectTransform>().anchoredPosition = newSlide;
              } 
              else if (newSlide.x <= minX)
              {
                 newSlide.x = minX;
                 panel.GetComponent<RectTransform>().anchoredPosition = newSlide;
              };
 
              if (newSlide.y >= maxY) {
                 newSlide.y = maxY;
                 panel.GetComponent<RectTransform>().anchoredPosition = newSlide;
              } 
              else if (newSlide.y <= minY)
              {
                 newSlide.y = minY;
                 panel.GetComponent<RectTransform>().anchoredPosition = newSlide;
              };
 
         }
      }
  }
Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

371 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How to make a gameobject clickable in a certain radius 1 Answer

Script doesn't let me disable a second panel and I cant find a way around this. 0 Answers

UI Jump Button - I want to click on the button to jump but instead I jump when I click anywhere on the screen. 0 Answers

How Can i Get This bool to work? Just need someone willing to explain. 2 Answers

AddListener fuction throwing a NullReferenceException error 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges