Advertisement
Guest User

Untitled

a guest
May 3rd, 2019
575
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.66 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class camControler : MonoBehaviour
  6. {
  7.  
  8.     private float scrollData;
  9.     private Camera cam;
  10.  
  11.     private float targetZoom;
  12.     private Vector3 vecZero = new Vector3(0, 0, 10);
  13.     Vector3 screenToWorldCube;
  14.  
  15.     [SerializeField] private Transform playerTransform;
  16.     [SerializeField] private float camTransformLerpSpeed;
  17.     private Vector3 targetPosition;
  18.     private Vector3 mouseOffSet;
  19.  
  20.     [SerializeField] float viewPortFactor;
  21.     [SerializeField] private float camLerpSpeed;
  22.  
  23.     // Start is called before the first frame update
  24.     void Start()
  25.     {
  26.         cam = Camera.main;
  27.         targetZoom = 7.5f;
  28.         targetPosition = playerTransform.position - vecZero;
  29.     }
  30.  
  31.     // Update is called once per frame
  32.     void FixedUpdate()
  33.     {
  34.         #region camera Zoom
  35.         scrollData = Input.GetAxisRaw("Mouse ScrollWheel");
  36.         if (scrollData != 0)
  37.         {
  38.             targetZoom -= 3f * scrollData;
  39.         }
  40.         targetZoom = Mathf.Clamp(targetZoom, 4.5f, 8f);
  41.         cam.orthographicSize = Mathf.Lerp(cam.orthographicSize, targetZoom, Time.deltaTime * camLerpSpeed);
  42.         #endregion
  43.  
  44.         screenToWorldCube = (cam.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 10)) - cam.ScreenToWorldPoint(vecZero)) * viewPortFactor;
  45.  
  46.         #region camera player follow
  47.         Vector2 playerDistance = new Vector2(Mathf.Abs(playerTransform.position.x - transform.position.x),
  48.             Mathf.Abs(playerTransform.position.y - transform.position.y));
  49.         Vector2 playerDistanceSign = new Vector2(Mathf.Sign(playerTransform.position.x - transform.position.x),
  50.             Mathf.Sign(playerTransform.position.y - transform.position.y));
  51.  
  52.         if (playerDistance.x > screenToWorldCube.x * .5f)
  53.         {
  54.             targetPosition.x = playerTransform.position.x - (screenToWorldCube.x * playerDistanceSign.x * .5f);
  55.         }
  56.         if (playerDistance.y > screenToWorldCube.y * .5f)
  57.         {
  58.             targetPosition.y = playerTransform.position.y - (screenToWorldCube.y * playerDistanceSign.y * .5f);
  59.         }
  60.         #endregion
  61.  
  62.         #region mouse follow
  63.         mouseOffSet = (cam.ScreenToWorldPoint(Input.mousePosition - vecZero) - transform.position).normalized;
  64.         #endregion
  65.  
  66.         transform.position = Vector3.Lerp(transform.position, targetPosition + mouseOffSet, Time.deltaTime * camTransformLerpSpeed);
  67.     }
  68.  
  69.  
  70.     void OnDrawGizmos()
  71.     {
  72.         Color c = Color.green;
  73.         c.a = .25f;
  74.         Gizmos.color = c;
  75.         Gizmos.DrawCube(transform.position, screenToWorldCube);
  76.     }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement