Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using UnityEngine.U2D;
- public class Camera1Controller : MonoBehaviour
- {
- [SerializeField] private Transform player;
- [SerializeField] private float movingPlayerOffset = 1f;
- private float zOffset;
- private Vector3 lastPlayerPosition;
- private float pixelStep;
- void Awake()
- {
- zOffset = transform.position.z;
- lastPlayerPosition = player.position;
- pixelStep = 1f / GetComponent<PixelPerfectCamera>().assetsPPU;
- }
- void LateUpdate()
- {
- float roundedX = Mathf.Round(player.position.x / pixelStep) * pixelStep;
- float roundedY = Mathf.Round(player.position.y / pixelStep) * pixelStep;
- Vector3 targetPosition = new Vector3(roundedX, roundedY, zOffset);
- Vector2 offset = new Vector2(player.position.x - transform.position.x, player.position.y - transform.position.y);
- float currentOffsetDistance = offset.magnitude;
- if (currentOffsetDistance >= movingPlayerOffset)
- {
- Vector2 normalizedOffset = offset.normalized * movingPlayerOffset;
- transform.position = new Vector3(
- player.position.x - normalizedOffset.x,
- player.position.y - normalizedOffset.y,
- zOffset
- );
- }
- else
- {
- float lerpSpeed = Time.deltaTime * 5f / movingPlayerOffset;
- transform.position = Vector3.Lerp(transform.position, targetPosition, lerpSpeed);
- }
- lastPlayerPosition = player.position;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment