Archivio Scripts

Camera che segue il Player

Questo script è relativamente semplice ma molto utile.
In molti tipi di giochi dovremmo avere una telecamera che segue il giocatore in modo “smooth”, cioè leggermente ritardato e fluido.
Che sia da dietro e che ruoti insieme al personaggio (come in un classico gioco in terza persona), oppure da una posizione più in alto e senza che la telecamera ruoti insieme al personaggio, questo script può fare al caso vostro.

Con questo script sarà possibile utilizzare diversi tipi di visuale, a seconda delle impostazioni che sceglierete.
Inoltre potrete scegliere il tipo di aggiornamento (UpdateSystem) per adattarlo al meglio all’aggiornamento del gioco.
La scelta di un UpdateSystem adeguato si rende necessario perché, per evitare leggeri ritardi ed effetti “flickering” della telecamera, l’aggiornamento dovrebbe essere sempre uguale a quello che usa il movimento del player.
Dunque, se per esempio il vostro player si muove tramite un rigidBody userà l’aggiornamento per la fisica (FixedUpdate) ed altrettanto dovrà fare la telecamera.

using UnityEngine;

public class CameraFollowCharacter : MonoBehaviour
{

    [SerializeField]
    private Transform target;

    [SerializeField]
    public Vector3 offsetPosition;
    public float cameraTargetHeight;
    public float cameraTargetHorizontal;

    [SerializeField]
    private Space SpaceType = Space.Self;
    Vector3 LoockAtPoint;

    public enum UpdateType { Update, FixedUpdate, LateUpdate };
    public UpdateType updateSystem=UpdateType.LateUpdate;

    [Range(1,5)]
    public float smoothMovement=1;


    //Nel caso si debba aggiornare in Update
    private void Update()
    {
        if(updateSystem.Equals(UpdateType.Update))
        Refresh(Time.deltaTime);
    }

    //Nel caso si debba aggiornare in FixedUpdate
    private void FixedUpdate()
    {
        if (updateSystem.Equals(UpdateType.FixedUpdate))
            Refresh(Time.fixedDeltaTime);
    }
    //Nel caso si debba aggiornare in LateUpdate
    private void LateUpdate()
    {
        if (updateSystem.Equals(UpdateType.LateUpdate))
            Refresh(Time.deltaTime);
    }

    //Il metodo che aggiorna le posizioni della telecamera
    public void Refresh(float updateDelta)
    {
        if (target == null)
        {
            Debug.LogWarning("Ops, No Target !", this);

            return;
        }



        //Se ruota insieme al target
        if (SpaceType == Space.Self)
        {
            transform.position =Vector3.Lerp(transform.position, target.TransformPoint(offsetPosition) , smoothMovement * updateDelta);
        }
        else
        {
            transform.position = Vector3.Lerp(transform.position, target.position + offsetPosition, smoothMovement * updateDelta);
        }

         LoockAtPoint= Vector3.Lerp(LoockAtPoint,(target.position + (target.up * cameraTargetHeight) + (target.right * cameraTargetHorizontal)), (smoothMovement*updateDelta));

         transform.LookAt(LoockAtPoint);
        

    }
}

 

Vi ricordo che per copiare il codice potete premere sull’icona in alto a destra della finestra dello script.

 

 

Sta a voi fare tutte le prove che volete, sistemando gli offsets e lo smooth ad hoc, per arrivare ad avere l’effetto che serve per il vostro gioco.

Un pensiero su “Camera che segue il Player

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *