Проблема может заключаться в том, что метод ChangeTarget не вызывается, либо новый объект, который передается в качестве цели, не является корректным или его позиция не обновляется.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraFloww : MonoBehaviour
{
public Transform player; // Цель, за которой должна следить камера
public float smoothSpeed = 0.125f; // Скорость сглаживания
public Vector3 offset; // Смещение камеры относительно цели
void LateUpdate()
{
if (player != null)
{
Vector3 desiredPosition = player.position + offset;
Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed);
transform.position = smoothedPosition;
}
}
// Вызовите этот метод, чтобы изменить цель камеры
public void ChangeTarget(Transform newPlayer)
{
player = newPlayer;
}
}
В этом коде добавлено сглаживание движения камеры с помощью Vector3.Lerp, что делает переход камеры более плавным. Также добавлено смещение offset, чтобы камера не находилась точно на позиции игрока, а была на небольшом расстоянии.
Убедитесь, что метод ChangeTarget вызывается корректно и передается правильный объект. Например:
public class GameManager : MonoBehaviour
{
public CameraFloww cameraFloww;
public Transform newPlayer;
void Start()
{
// Пример вызова метода для смены цели камеры
cameraFloww.ChangeTarget(newPlayer);
}
}
Вот пример моего кода
(using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraFloww : MonoBehaviour
{
public Transform player; // Цель, за которой должна следить камера
void Update()
{
if (player != null)
{
// Обновляем позицию камеры по осям X и Y
transform.position = new Vector3(player.position.x, player.position.y, transform.position.z);
}
}
// Вызовите этот метод, чтобы изменить цель камеры
public void ChangeTarget(Transform NewPlayer)
{
player = NewPlayer;
}
})