Один из вариантов - проверить, не заземлен ли он, а затем просто не изменять компонент y в transform.position
:
using System.Collections;
using UnityEngine;
public class CameraFollow : MonoBehaviour
{
public PlayerController otherScript;
public Transform target;
public float smoothSpeed = 0.125f;
public Vector3 offset;
void Update()
{
Vector3 desiredPosition = target.position + offset;
Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition,
smoothSpeed);
if(!otherScript.isGrounded)
{
smoothedPosition.y = transform.position.y;
}
transform.position = smoothedPosition;
transform.LookAt(target);
}
}
Кстати, движение камеры обычно следует обрабатывать в Update
или, возможно, в LateUpdate
, чтобы он гарантированно запускался один раз перед рендерингом каждого кадра.