Page 1 sur 1

[MY-AL] Problème de déplacement

Publié : 02 Oct 2017 00:42
par Archimage77
Bonjour, je viens vers vous car j'ai un soucis d'algorithmie. Je pense que je suis pas loin de la solution mais je n'y arrive pas.
Le but est de faire bougé un personnage (en vrai c'est plus compliqué mais je simplifie), jusque la pas de soucis. Le problème est que dans mon jeu j'ai besoin d’accéléré le temps.
J'ai aussi besoin de soulagé mon CPU car en faite l'action d'avancer me coute cher (sur plateforme mobile) et donc je fais des pauses dans mes déplacements. Voici mon premier code simplifié

Code : Tout sélectionner

void FixedUpdate()
{
	run();
}

private void run()
{
	_timeRun += Time.deltaTime;
	if (_timeRun >= _delayRun)
	{
		float deltaMove = _runSpeed * Time.deltaTime;
		move(deltaMove); // ma fonction qui coute cher
		_timeRun = _timeRun - _delayRun; // on rattrape le décalage
	}
}

private void move(float delta)
{
	//......
}
J'ai donc essayé d'implémenté l’accélération du temps, en faite la pause est plus longue mais le déplacement est plus grand ce qui devrai revenir au même ?

Code : Tout sélectionner

void FixedUpdate()
{
	run();
}

private void run()
{
	_timeRun += Time.deltaTime;
	if (_timeRun >= _delayRun* _ratioSpeed)
	{
		float deltaMove = _runSpeed * Time.deltaTime * _ratioSpeed;
		move(deltaMove); // ma fonction qui coute cher
		_timeRun = _timeRun - _delayRun; // on rattrape le décalage
	}
}

private void move(float delta)
{
	//......
}
Le soucis est que quand je fais mes tests, en vérité les personnages n'arrive pas au même moment (en mesurant le temps de déplacement divisé par le ratio), j'ai donc probablement loupé quelque chose...

auriez vous une idée ?
Si ce n'est pas claire hésitez pas à me le dire.
Merci par avance.

Re: [Algo/C#] Problème de déplacement

Publié : 02 Oct 2017 12:36
par Wadison
Hello


Je calculerai mon propre deltaTime quelque chose dans le genre:

Code : Tout sélectionner

        _DeltaRun += Time.deltaTime;
	if (_DeltaRun >= _delayRun)
	{
		float deltaMove = _runSpeed * _DeltaRun * _ratioSpeed;
		move(deltaMove); // ma fonction qui coute cher
		_DeltaRun =0;
	}
Ceci fonctionne uniquement si les déplacements sont rectilignes.
l'objet n'arriverai pas exactement au même endroit sinon.


A tester
++

Re: [MY-AL] Problème de déplacement

Publié : 02 Oct 2017 15:31
par Archimage77
Merci beaucoup pour ta réponse, en effet sa à l'air d'être pas mal d’après mes tests. Oui mes déplacement son tous rectiligne.

Je me pose toujours la question, à ce que je dois mettre ce genre d'algorithme dans un FixedUpdate ou dans un Update ?

Merci en tout cas.

(désolé pour le titre du post, j'ai rectifié)

Re: [MY-AL] Problème de déplacement

Publié : 02 Oct 2017 18:22
par Wadison
J'ai bien fait de chercher la réponse moi-même j'utilise que Update/LateUpdate.

Mais a priori non, car tu n'utilise pas la physique pour déplacer ton objet.
https://docs.unity3d.com/ScriptReferenc ... pdate.html

Je suis newbie sous Unity3d, je n'ai pas les tenant et les aboutissants, si quelqu'un peu expliquer les bug que ca provoque?! je suis preneur.

Re: [MY-AL] Problème de déplacement

Publié : 03 Oct 2017 11:51
par boubouk50
La différence entre FixedUpdate () et Update () est le temps de mise à jour.
Un Update () a un temps variable en fonction de l'affichage qui équivaut à deltaTime.
Un FixedUpdate () a un temps défini, toutes les X milliseconds.
Le but est d'avoir un temps fixe pour gérer la physique.

https://unity3d.com/fr/learn/tutorials/ ... ixedupdate

Re: [MY-AL] Problème de déplacement

Publié : 03 Oct 2017 19:42
par Wadison
Bonjour,
Le nom est clair pourtant! m'enfin, merci de l'eclaircissement.

C'est pratique, mais je suis étonnée d'un tel système.
Unity3D doit vraisemblablement provoquer un lag en cas de bourre pour garantir le "tick" fixe.
Il y a moyen de régler le tick pour plus ou moins de précision?


A regarder le Physic manager tout semble plus compliqué?! je n'ai pas trouvé ma réponse clairement.
https://docs.unity3d.com/Manual/class-P ... nager.html