aide pour un script de déplacement

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Janpole
Messages : 20
Inscription : 12 Fév 2021 18:51

aide pour un script de déplacement

Message par Janpole » 18 Fév 2021 14:36

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.

Avatar de l’utilisateur
Max
Messages : 8177
Inscription : 30 Juil 2011 13:57
Contact :

Re: aide pour un script de déplacement

Message par Max » 18 Fév 2021 19:38

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.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « Scripting »