Page 1 sur 1

aide pour un script de déplacement

Publié : 18 Fév 2021 14:36
par Janpole
bonjour a tous et a toutes , j'ai ici un problème :

Code : Tout sélectionner

using System.Collections;
using UnityEngine;

public class PalyerController : MonoBehaviour
{
    private CharacterController controller;
    private Vector3 direction;
    public float forwardSpeed;
    public float maxspeed;

    private int desiredLane = 1;//0 :left 1:middle 2:right 
    public float laneDistance = 4; //la distance
    public bool gameStarted = true;
    void Start()
    {
        gameStarted = true;
        controller = GetComponent<CharacterController>();
    }

    // Update is called once per frame
    void Update()
    {
        if(gameStarted == true)
        {
            if (forwardSpeed < maxspeed)
                forwardSpeed += 0.1f * Time.deltaTime;
            direction.z = forwardSpeed;
            if (SwipeManager.swipeRight)
            {
                desiredLane++;
                if (desiredLane == 3)
                    desiredLane = 2;
            }

            if (SwipeManager.swipeLeft)
            {
                desiredLane--;
                if (desiredLane == -1)
                    desiredLane = 0;
            }

            Vector3 targetPosition = transform.position.z * transform.forward + transform.position.y * transform.up;

            if (desiredLane == 0)
            {
                targetPosition += Vector3.left * laneDistance;
            }
            else if (desiredLane == 2)
            {
                targetPosition += Vector3.right * laneDistance;
            }


            if (transform.position == targetPosition)
                return;
            Vector3 diff = targetPosition - transform.position;
            Vector3 moveDir = diff.normalized * 25 * Time.deltaTime;
            if (moveDir.sqrMagnitude < diff.sqrMagnitude)
                controller.Move(moveDir);
            else
                controller.Move(diff);

        }
    }
        

    private void FixedUpdate()
    {
       if(gameStarted == true)
        {
            controller.Move(direction * Time.fixedDeltaTime);
        }
       
    }

    private void OnControllerColliderHit(ControllerColliderHit hit)
    {
        if (hit.transform.tag == "obstacle")
        {
            PlayerManager.gameOver = true;
            gameStarted = false;
        }
    }
}
dans ce script ci dessus les déplacements se trouvent dans fixed update , ce qui provoque un "lag" désagréable.

comment je pourrais faire pour déplacer ce bout de scripts dans update sans avoir de problème ?

(j'ai eu des problèmes comme que la voiture n'avance que quand je change de ligne et encore d'autres problèmes)


merci de vos réponses en avance.

Re: aide pour un script de déplacement

Publié : 18 Fév 2021 19:38
par Max
Janpole a écrit :
18 Fév 2021 14:36
dans ce script ci dessus les déplacements se trouvent dans fixed update , ce qui provoque un "lag" désagréable.

comment je pourrais faire pour déplacer ce bout de scripts dans update sans avoir de problème ?
Tu as une partie de tes Move dans Update() et une autre dans FixedUpdate(). Pas logique.
Je dirais que cela n'est pas vraiment destiné à être dans FixedUpdate(), et normal que cela lag vue que c'est décorrélé de l'update et donc du framerate.

Re: aide pour un script de déplacement

Publié : 28 Fév 2021 22:14
par Janpole
oui je viens de résoudre le problème et maintenant le jeu est très fluide