[RESOLU] [DB-AL] Mes gameObject ce déplacent plus lentement ...

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Autodidactelife
Messages : 47
Inscription : 21 Fév 2018 23:04
Localisation : France

[RESOLU] [DB-AL] Mes gameObject ce déplacent plus lentement ...

Message par Autodidactelife » 07 Juil 2018 08:35

Bonjour à tous !

Voilà après avoir travailler sur une flèche pendant plusieurs jours à réfléchir vu que je ne trouvais pas les mots pour internet j'ai fini par quelque chose qui m'allait. (Quand vous allez voir vous allez me dire que je me suis casser la tête pour rien j'imagine que oui il y à mieux).

Et là en testant je remarque que mon gameObject joueur et mes NavMeshAgent également, au début je pensais que c'était car j'avais mis 360 en drag sur leurs Rigidbody (oui j'avais oublier complètement l'utilisation des variables du Rigidbody j'ai révisé !)

Et franchement, à chaque fois des trucs apparaissent sans que j'ai rien toucher et c'est des trucs qui me troue la tête d'un niveau phénoménale, alors cette fois, j'ai aucune idée donc je viens vous demander de l'aide.

Voici déjà mon code lié à ma flèche (elle est pas en jeu donc je vois pas le rapport mais bon):

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class _fleche : MonoBehaviour {

    bool down = false;

    void Start() {
        transform.GetComponent<Rigidbody>().AddForce(transform.up * 50f, ForceMode.Impulse);
    }

    void Update() {
        float angleX = transform.localEulerAngles.x;

        if (!down && Vector3.Distance(transform.up, Vector3.down) > 0.02f && transform.GetComponent<Rigidbody>().velocity.magnitude <= 15f) {
            if (angleX > 180) {
                transform.Rotate(new Vector3(-120f * Time.deltaTime, 0f, 0f));
            } else if (angleX < 180) {
                transform.Rotate(new Vector3(120f * Time.deltaTime, 0f, 0f));
            }
        } else if (!down && transform.GetComponent<Rigidbody>().velocity.magnitude <= 15f) {
            down = true;
            transform.rotation = new Quaternion(1f, 0f, 0f, 0f);
        }

        if (transform.GetComponent<Rigidbody>().velocity.magnitude <= 15f || down) transform.GetComponent<Rigidbody>().velocity += transform.up;
    }

}
C'est la seule et unique chose que j'ai changer, je ne vois rien qui puisse changer le mouvement du joueur (qui modifie la vélocité) ou le joueur.

J'ai essayer de changer la multiplication de la direction pour le mouvement ou le speed / acceleration du meshagent, rien y fait, toujours de beaux escargots.

J'ai plus de 800 lignes de programmations sur divers et j'aimerais ne pas partager entièrement le projet étant donner que j'arrive à la fin du prototype ^^'

Je suis sur les rotules ... Plusieurs semaines que je travail dessus, que je réfléchis, que j'ajuste, que je reprogramme entièrement des choses ...

Donc si vous avez des pistes qui puisse résoudre mon problème, je prend ! Ou si vous voulez que je vérifie quelque chose dans mes scripts, fournir des parties qui font tel ou tel action ça peut aller.

Ps: La gravité est celle de base je n'ai pas toucher. Les NavMeshAgent même avec la gravité désactivé ils sont aussi lent, avec 1 en masse, 0 en drag, une vitesse de 50 et accélération de 50 (c'était 10 et 5 à la base), mais rien ne change :'(
Dernière édition par Autodidactelife le 07 Juil 2018 17:22, édité 1 fois.

Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

Re: Mes gameObject ce déplacent plus lentement ...

Message par Farstone » 07 Juil 2018 13:08

Salut ! J'ai un peu de mal à comprendre la finalité du code et je crois que tu a oublié quelques mots dans ton post sans faire gaffe, essaie de mieux expliquer le problème. Je vais essayer de te pointer les points négatif du script pour moi, tu dit vouloir faire une flèche (un projectile je suppose) mais tu utilise une combinaison de rigidbody et de vector, tu devrais simplement choisir l'un ou l'autre, le rigidbody gère déjà tout ça pour toi et il n'aime pas vraiment qu'on touche au transform. Attention au GetComponent inutile dans l'update, je rabâche mais c'est une perte de perf énorme pour rien, stock ton rb dans une variable dans le start.
Vue que tu ne touche qu'a la rotation du transform ce n'est pas un drame mais fait attention à bien différencier l'Update du FixedUpdate pour ne pas avoir de soucis par la suite, il peux paraître abstrait, hésite pas à demander si tu ne comprend pas totalement son utilité, c'est important.
D’ailleurs, pourquoi suspecter ce script si tu nous dit qu'il n'est pas dans le scène ? Si tu ne l’instancie pas quelques part il n'y a pas de raison que se soit lui le fautif :-D J'attend t'es précisions sur le problème pour pouvoir mieux t'aider, tu n'a pas a partager le projet, juste nous expliquer un peu mieux ce qu'il ce passe dans le projet :super:
► Afficher le texte
Dernière édition par Farstone le 07 Juil 2018 16:02, édité 2 fois.

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

Re: Mes gameObject ce déplacent plus lentement ...

Message par Max » 07 Juil 2018 13:19

Bonjour,

je plussoie, ton explication est très confuse et finalement on ne sait pas vraiment quel est ton soucis (seul le titre nous met sur la voie). Tu parles de NavMeshAgents, on ne sait pas trop le rapport, bref essais d'être précis, concis, et avec des phrases comportant tous les mots ;)
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

Autodidactelife
Messages : 47
Inscription : 21 Fév 2018 23:04
Localisation : France

Re: Mes gameObject ce déplacent plus lentement ...

Message par Autodidactelife » 07 Juil 2018 17:22

Merci à vous deux pour la réponse.
J'ai vu que le sujet à était déplacer dans la partie script, à la base c'était plus le soucis de lenteur dont je ne savais pas d'où il venait, je ne savais pas si c'était lié à des scripts.

Je suis désolé, je n'avais pas dormis j'ai du mal à partir dormir quand je heurte un soucis :/

Sinon j'ai une bonne nouvelle pour vous et une mauvaise pour moi.
La bonne c'est que j'ai trouvé ... La mauvaise c'est que je suis totalement abrutis !

Je ne sais pas quand ni comment, j'ai modifier le prefab de l'ennemie, sachant que mon Unity crash assez régulièrement, je pense l'avoir corrigé me l'avoir mis en tête, après un crash oublié d'avoir sauvegarde et voilà :)

Donc mon personnage à un speed dans son script et il est utilisé pour le NavMeshAgent, sauf que je le voyais pas changer ^^'
Problème résolut !

Par contre si vous avez une meilleur solution pour faire descendre l'angle X de ma flèche je prend au passage, je trouvais ça bizarre que j'ajoute un script et que ça change des trucs, mais c'était juste lié à un des nombreux crash. (Et les crash sont surement pas car "Unity est mal foutu", mais car j'ai du faire un truc qu'il lui plait pas :-/ par contre je sais pas quoi)

Merci en tout cas pour m'avoir dis que j'organisme mal pour l'utilisation des getComponent, de me dire que mon code est nul pour ma flèche :aille2: (ironie, je sais que c'est pas pour descendre mais pour aider), je le sais mais je n'ai pas trouvé mieux (j'ai fais plusieurs test pendant 3j pour en arrivé là ^^' j'ai essayer plusieurs trucs de plusieurs façons et encore il y à qu'un seul angle à géré :taré1: )

Et merci de m'avoir rappeler de pas poster de message quand j'ai pas dormis, car ça sert à rien je suis incompréhensible dans mes propos (et surement dans ma réflexion aussi ^^')

Ps: Pour ma flèche j'avais essayer 2 GameObject avec Rigidbody lié par un fixedJoint mais ... Quand ça part droit en l'air, ça rend un truc affreux, le haut ne va jamais en bas, et si il y va ça fait des va et viens ...)



Ps2: Je suspectais ce code car c'était le seul que j'ai ajouté entre le moment où ça marche et le moment où c'était lent. Mais j'ai dû avoir un crash d'Unity et pas dû sauvegarder les valeurs. Je vais essayer de faire plus attention et mettre une variable pour tout les getComponent ^^

Et je crois bien utilisé update ? Je sais pas si je l'utilise mal, j'utilise en général sois Update sois LateUpdate, je sais que lateUpdate s'executé après l'update, en général tout ce qui est affichage et visuel je met sur le late, tout ce qui est normal sur l'update et si j'ai besoin que ce sois précis j'utilise le fixed, mais je ne précise rien, je penses que le jeu doit fonctionner au rythme du joueur, perte ou non de frame.

Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

Re: [RESOLU] [DB-AL] Mes gameObject ce déplacent plus lentement ...

Message par Farstone » 07 Juil 2018 18:15

La je comprend mieux, pour faire en sorte que ta flèche suive la trajectoire tu peux faire transform.forward = rigidbody.velocity.normalized il me semble qu'il y a aussi une fonction math pour transformer la direction en rotation mais je n'en sait pas plus vue que forward marche très bien, en ce qui concerne l'update, elle est de toute façons très rapide et on ne verras pas la différence avec LateUpdate, c'est surtout utilisé pour nettoyer une frame quand on a des allocations qui doivent être disposer et ce genre de choses, le FixedUpdate sert a avoir une assurance quand tu utilise de la physique que toute les étapes de la trajectoire soient bien effectué pendant la durée de vie de l'objet, l'update est plus précise car exécuté plus souvent mais elle varie selon le temps qu'a prit la dernière frame pour s’exécuté, résultat, 2 simulation peuvent produire un résultat différent à cause de c'est petite/grande variations, ce qui n'est pas le cas avec FixedUpdate qui lui ferras "x" exécution par seconde, quitte à s’exécuté plusieurs fois en 1 frame pour rattraper son retard, mais laisse le soin au rigidbody de gérer ça pour l'instant :-D
Dernière édition par Farstone le 07 Juil 2018 19:43, édité 1 fois.

Autodidactelife
Messages : 47
Inscription : 21 Fév 2018 23:04
Localisation : France

Re: [RESOLU] [DB-AL] Mes gameObject ce déplacent plus lentement ...

Message par Autodidactelife » 07 Juil 2018 19:13

Personnellement j'ai le visuel des UI quand elles suivent la caméra qui saccadent quand elles sont en Update et parfait en LateUpdate, peut être c'était à cause d'autre chose mais j'avais trouver à l'époque plusieurs sujets sur ça, donc j'ai pris l'habitude de faire ça.

Et le fixedUpdate j'avais bien compris sa fonction, j'avais pas réfléchis comme tu viens de me le dire par contre, pour un jeu solo je me suis dis "oh, si le mec à des pertes de frames pas trop grave", mais en effet, ça fait des conséquences, je vais revoir mes physiques ;)

Je vais voir pour la façon que tu m'as donner, rien qu'avec un post qui à était au final inutile pour le problème initiale j'ai appris plusieurs choses, surtout pour optimisé mon code, je suis à fond sur l'optimisation et les failles, ici étant un jeu solo, je fais moins attention aux failles, le joueur joue comme il le souhaite, par contre niveau optimisation j'ai énormément de chemin à faire.

Je te remercie énormément ! J'ai retirer tout les getComponent qui était utilisé plusieurs fois pour ne le prendre qu'une seule fois sur une variable ^^

Edit: Avec la gravité en effet ton code marche parfaitement merci !

Répondre

Revenir vers « (C#) CSharp »