C#

Unity2D Плавное перемещение камеры

Нужно плавно передвигать камеру за курсором. Научился перемещать резко, но как сделать это плавно не знаю :\
Вот код:

using UnityEngine;

public class CameraMoving : MonoBehaviour
{
private UnityEngine.Transform Player;
public static bool Flag = false;
Vector3 Cam;
Vector3 temp;
void Start()
{
Player = GameObject.FindGameObjectWithTag("Player").transform;
temp = Input.mousePosition;
}
void LateUpdate()
{
temp.x = Input.mousePosition.x + Player.transform.position.x - Camera.main.pixelWidth / 2;
temp.y = Input.mousePosition.y + Player.transform.position.y - Camera.main.pixelHeight / 2;
temp.z = -15;

float mw = Input.GetAxis("Mouse ScrollWheel");
if (mw > 0.1)
{
temp.z += Time.deltaTime * 50;
}
if (mw < -0.1)
{
temp.z -= Time.deltaTime * 50;
}

if (Flag == false)
{
transform.position = temp;
}

}
}
using UnityEngine;

public class CameraMoving : MonoBehaviour
{
private Transform Player;
public static bool Flag = false;
Vector3 Cam;
Vector3 temp;
Vector3 velocity = Vector3.zero ;
float smoothTime = 0.3f;

void Start()
{
Player = GameObject.FindGameObjectWithTag("Player").transform;
temp = Input.mousePosition;
}

void LateUpdate()
{
temp.x = Input.mousePosition.x + Player.transform.position.x - Camera.main.pixelWidth / 2;
temp.y = Input.mousePosition.y + Player.transform.position.y - Camera.main.pixelHeight / 2;
temp.z = -15;

float mw = Input.GetAxis("Mouse ScrollWheel");
if (mw > 0.1)
{
temp.z += Time.deltaTime * 50;
}
if (mw < -0.1)
{
temp.z -= Time.deltaTime * 50;
}

if (Flag == false)
{
Vector3 targetPosition = temp;
transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, smoothTime);
}
}
}


Попробуй эта
***кенжебек *** ***тажигарин****
***кенжебек *** ***тажигарин****
140
Лучший ответ
Игорь Воробьёв Вау чел, спасибо большое)
Работает
Игорь Воробьёв А как можно ограничить это перемещение в определенном радиусе? Чтобы например камера не улетала дальше чем на 10 юнитов от игрока?
Игорь Воробьёв float mw = Input.GetAxis("Mouse ScrollWheel");
if (mw > 0.1)
{
Mousepos.z += Time.deltaTime * 50;
}
if (mw < -0.1)
{
Mousepos.z -= Time.deltaTime * 50;
}

if (!Flag)
{
Vector3 targetPosition = Mousepos;
Vector3 playerToTarget = targetPosition - Player;

if (playerToTarget.magnitude > distance)
{
playerToTarget = playerToTarget.normalized * distance;
targetPosition = Player + playerToTarget;
}
transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, smoothTime);
}
}
}
Игорь Воробьёв using UnityEngine;

public class CameraMoving : MonoBehaviour
{
private Vector3 Player;
public static bool Flag = false;
Vector3 Mousepos;
Vector3 velocity = Vector3.zero ;
float smoothTime = 2f;
float distance = 10;
void Start()
{
Mousepos = Input.mousePosition;
}

void LateUpdate()
{
Player = GameObject.FindGameObjectWithTag("Player").transform.position;

Mousepos.x = Input.mousePosition.x + Player.x - Camera.main.pixelWidth / 2;
Mousepos.y = Input.mousePosition.y + Player.y - Camera.main.pixelHeight / 2;
Mousepos.z = -15;
Игорь Воробьёв float mw = Input.GetAxis("Mouse ScrollWheel");
if (mw > 0.1)
{
Mousepos.z += Time.deltaTime * 50;
}
if (mw < -0.1)
{
Mousepos.z -= Time.deltaTime * 50;
}

if (!Flag)
{
Vector3 targetPosition = Mousepos;
Vector3 playerToTarget = targetPosition - Player;
Игорь Воробьёв if (playerToTarget.magnitude > distance)
{
playerToTarget = playerToTarget.normalized * distance;
targetPosition = Player + playerToTarget;
}

targetPosition = new Vector3(targetPosition.x, targetPosition.y, -15f);

Debug.Log(targetPosition);

transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, smoothTime);
}
}
}
 using UnityEngine; 

public class CameraMoving : MonoBehaviour
{
private Transform Player;
public static bool Flag = false;
Vector3 Cam;
Vector3 temp;
public float smoothSpeed = 0.125f; // Скорость сглаживания

void Start()
{
Player = GameObject.FindGameObjectWithTag("Player").transform;
temp = Input.mousePosition;
}

void LateUpdate()
{
temp.x = Input.mousePosition.x + Player.transform.position.x - Camera.main.pixelWidth / 2;
temp.y = Input.mousePosition.y + Player.transform.position.y - Camera.main.pixelHeight / 2;
temp.z = -15;

float mw = Input.GetAxis("Mouse ScrollWheel");
if (mw > 0.1)
{
temp.z += Time.deltaTime * 50;
}
if (mw < -0.1)
{
temp.z -= Time.deltaTime * 50;
}

if (Flag == false)
{
// Используйте Lerp для плавного перемещения камеры
Vector3 smoothedPosition = Vector3.Lerp(transform.position, temp, smoothSpeed);
transform.position = smoothedPosition;
}
}
}
В этом коде я добавил переменную smoothSpeed, которая определяет скорость сглаживания. Функция Vector3.Lerp затем используется для плавного перемещения камеры от текущего положения к новому положению. Вы можете настроить smoothSpeed для получения желаемой скорости перемещения.