Guest User

Untitled

a guest
Aug 27th, 2025
15
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.54 KB | None | 0 0
  1. using UnityEngine;
  2. using UnityEngine.U2D;
  3.  
  4. public class Camera1Controller : MonoBehaviour
  5. {
  6.     [SerializeField] private Transform player;
  7.     [SerializeField] private float movingPlayerOffset = 1f;
  8.  
  9.     private float zOffset;
  10.     private Vector3 lastPlayerPosition;
  11.     private float pixelStep;
  12.  
  13.     void Awake()
  14.     {
  15.         zOffset = transform.position.z;
  16.         lastPlayerPosition = player.position;
  17.         pixelStep = 1f / GetComponent<PixelPerfectCamera>().assetsPPU;
  18.     }
  19.  
  20.     void LateUpdate()
  21.     {
  22.         float roundedX = Mathf.Round(player.position.x / pixelStep) * pixelStep;
  23.         float roundedY = Mathf.Round(player.position.y / pixelStep) * pixelStep;
  24.         Vector3 targetPosition = new Vector3(roundedX, roundedY, zOffset);
  25.  
  26.         Vector2 offset = new Vector2(player.position.x - transform.position.x, player.position.y - transform.position.y);
  27.         float currentOffsetDistance = offset.magnitude;
  28.  
  29.         if (currentOffsetDistance >= movingPlayerOffset)
  30.         {
  31.             Vector2 normalizedOffset = offset.normalized * movingPlayerOffset;
  32.             transform.position = new Vector3(
  33.                 player.position.x - normalizedOffset.x,
  34.                 player.position.y - normalizedOffset.y,
  35.                 zOffset
  36.             );
  37.         }
  38.         else
  39.         {
  40.             float lerpSpeed = Time.deltaTime * 5f / movingPlayerOffset;
  41.             transform.position = Vector3.Lerp(transform.position, targetPosition, lerpSpeed);
  42.         }
  43.  
  44.         lastPlayerPosition = player.position;
  45.     }
  46. }
Advertisement
Add Comment
Please, Sign In to add comment