Search Unity

Making a GUI Object stay in screen using ViewportToWorldPoint

Discussion in 'Scripting' started by Kameron-Schwab, Nov 22, 2017.

  1. Kameron-Schwab

    Kameron-Schwab

    Joined:
    Sep 16, 2015
    Posts:
    33
    So, the code below works but it moves the Panel gui to the bottom left corner
    Here's the code:
    Code (CSharp):
    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4.  
    5. public class dragablePanel : MonoBehaviour {
    6.  
    7.     float OffsetX;
    8.     float OffsetY;
    9.     // Use this for initialization
    10.     void Start () {
    11.      
    12.     }
    13.  
    14.     // Update is called once per frame
    15.     void Update () {
    16.      
    17.     }
    18.  
    19.     public void BeginDrag()
    20.     {      
    21.         OffsetX = transform.position.x - Input.mousePosition.x;
    22.         OffsetY = transform.position.y - Input.mousePosition.y;
    23.     }
    24.  
    25.     public void OnDrag()
    26.     {
    27.         // Old Working without border!?
    28.         //transform.position = new Vector3(OffsetX + Input.mousePosition.x, OffsetY + Input.mousePosition.y);
    29.  
    30.         float dist = (OffsetY - Camera.main.transform.position.y);
    31.         float leftLimitation = Camera.main.ViewportToWorldPoint(new Vector3(0, 0, dist)).x;
    32.         float rightLimitation = Camera.main.ViewportToWorldPoint(new Vector3(1, 0, dist)).x;
    33.  
    34.         float upLimitation = Camera.main.ViewportToWorldPoint(new Vector3(0, 0, dist)).z;
    35.         float downLimitation = Camera.main.ViewportToWorldPoint(new Vector3(0, 1, dist)).z;
    36.  
    37.         float tempx = Mathf.Clamp(OffsetX + Input.mousePosition.x, upLimitation, downLimitation);
    38.         float tempy = Mathf.Clamp(OffsetY + Input.mousePosition.y, leftLimitation, rightLimitation);
    39.         transform.position = new Vector3(tempx, tempy);
    40.     }
    41. }
    42.