[RESOLU] La vitesse de mon objet ne change pas et mon objet traverse les murs

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
ced_le_dingue
Messages : 70
Inscription : 29 Oct 2019 21:58

[RESOLU] La vitesse de mon objet ne change pas et mon objet traverse les murs

Message par ced_le_dingue » 16 Sep 2020 16:40

Bonjour à tous,

Je suis débutant et j'essaye de comprendre comment faire bouger des objet etc...
J'ai fait le code ci dessous pour bouger mon objet "barre". J'ai quelques soucis, donc voici mes 3 questions:
Image
1) - Pourquoi la vitesse de translation de mon objet reste inchangée quelle que soit la valeur de ma variable vitesse_barre?
En effet, que je mette vitesse_barre = 1f; ou vitesse_barre= 5000f; ça ne change absolument rien (même en déclarant un int à la place).

2) - Comment je fais pour que mon objet barre ne traverse plus les murs qu'il rencontre?
Car j'ai tout essayé, j'ai mis des box collider à mes murs et ma barre, désactivé IsTrigger, mais rien n'y fait

Code : Tout sélectionner

public class Barre : MonoBehaviour
{

    public float vitesse_barre = 1f;

    // Start is called before the first frame update
    void Start()
    {
 
    }

    // Update is called once per frame
    void Update()
    {
        // ici j'ai mis -Input car je veux inverser la direction
        transform.Translate(Vector3.right * -Input.GetAxis("Horizontal") * vitesse_barre* Time.deltaTime);

    }
NB: J'ai essayé de mettre un rigidbody et faire bouger ma barre avec un AddForce mais ça ne me convient pas car la barre se déplace certes, mais avec de l'inertie, et moi je veux que ma barre arrete de se déplacer une fois que j'ai fini d'appuyer sur mes touches "Horizontales", c'est pour ça que je me suis rabattu sur Translate, et comme ça le système n'a pas à calculer la physique.

3) - Je viens de voir un nouveau problème en vérifiant mes boxs de collisions avec des rigidbody: mes objet s'arrentent là où il n'y a pas de box de collision. J'ai dupliqué ma barre et observé ce qui se passe quand elle tombe à différent endroits sur mon sol (info utile: le sol est un carré sur lequel j'ai extrudé tous les bords), et regardez ce qu'il se passe:

Image

Pourtant, les colliders de mon sol sont bien au niveau du bas et non au niveau des bords non?:
Image





Merci beaucoup pour votre aide vous êtes supers :coeur:
Dernière édition par ced_le_dingue le 22 Sep 2020 14:11, édité 1 fois.

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

Re: La vitesse de mon objet ne change pas et mon objet traverse les murs

Message par Max » 16 Sep 2020 17:50

Bonsoir,

ça fait beaucoup de questions pour un seul sujet, dont pas mal ne sont pas liées à la partie script.

1) Pour ce qui est de la vitesse de déplacement qui ne varie pas, le code semble valide. Tu changes la valeur en dur dans le code ou dans l'inspector ?

3) Pour ce qui est des soucis de Collider, ton élément de décor doit avoir un MeshCollider (objet en static), et non un BoxCollider, cela devrait solutionner ton soucis sur ce point.

2) Pour ce qui est de la détection, si tu ne souhaites pas passer par les RigidBody, tu peux employer les Raycasts, aux deux extrémités pour détecter quand tu arrives sur un des bords:
Image
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

ced_le_dingue
Messages : 70
Inscription : 29 Oct 2019 21:58

Re: La vitesse de mon objet ne change pas et mon objet traverse les murs

Message par ced_le_dingue » 16 Sep 2020 18:19

Salut Max,

T'es un génie et putain que je suis con :O mais crois moi que maintenant j'ai retenu la leçon haha. Donc :

1) C'est exactement ça, je ne touchais pas à ma valeur dans l'inspector... par ce que je modifiais la valeur directement dans mon script.... Je saisis pas du coup, OK j'ai pas touché à ma valeur dans l'inspector, mais avant chaque compilation je changeais ma valeur initiale (500, 1, etc...) directement dans mon script, donc pourquoi ma valeur de 500 subsistait dans l'inspector?

2) Je voulais supprimer cette partie là avant que quelqu'un ne réponde car en effet je n'avais pas du tout compris que pour un objet, c'était soit l'un soit l'autre (box collider, mesh collider, spherecollider etc...) et en faisant un tour sur la toile j'ai compris finalement, c'était vraiment tout bête.

3) Du coup en mettant juste un mesh collider ça marche..... Donc pas besoin de rigidbody on dirait? 8| ... Cela dit si je reste appuyé trop longtemps sur la touche de déplacement regarde ce qu'il se passe, ma barre par en couille :triste1:
C'est quoi le soucis du coup?

(Outre les raycasts j'avais vu qu'on peut utiliser des Mathf.Clamp pour pas dépasser certaine valeur en x... mais en effet avec les raycast c'est mieux car ça m'évitera de rechanger mes valeurs Mathf.Clamp(barre.positionX, LimiteX, LimiteX2) si jamais les coordonnées de mes bordures venaient à changer.... Donc ouai tu as raison, avec des Raycasts c'est mieux
Image

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

Re: La vitesse de mon objet ne change pas et mon objet traverse les murs

Message par Max » 16 Sep 2020 18:45

Pour ce qui est de la valeur de vitesse, ce qui est entré dans l'inspector prendra toujours le pas sur ce que tu auras mis dans le code. La valeur initiale que tu renseignes dans le script, est en fait une valeur par défaut que prendra ta variable lors de l'ajout de ton script comme componant sur un GameObject.

Pour ta raquette, les solutions sont multiples. Si tu connait les dimensions de ton décor, tu dois pouvoir avoir aisément les bornes pour les lier à ton déplacement. C'est une solution simple et qui ne nécessite aucun artifice (comme des éléments physiques par exemple) si ce n'est une ou deux lignes de code.
Sinon, si tu passes par les RigidBody, il faut stopper le mouvement quand ta raquette arrive au contact d'un des bords. Par exemple par une détection par Trigger. Une commande par Translate pour le coup serait plus judicieuse dans ce cas (plutôt que des AddForces). Sinon, il est certains qu'elle va passer par dessus bord ou se trouver éjectée si la contrainte persiste, même une fois arrivé au bout. Sur des décors très variés en terme de forme ou même aléatoire, la solution des Raycast est souvent une alternative intéressante et relativement simple à mette en œuvre.
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

ced_le_dingue
Messages : 70
Inscription : 29 Oct 2019 21:58

Re: La vitesse de mon objet ne change pas et mon objet traverse les murs

Message par ced_le_dingue » 16 Sep 2020 20:04

Super merci pour les précisions concernant le fonctionnement de l'inspector :amen:

D'accord, je vais tester toutes ces solutions et ça me permettra de bien me faire la main. Pour l'instant j'ai essayé la solution du rigidbody en mettant des contraintes partout sur x,y,z en position et en rotation... Mais dans ce cas de figure, si je reste appuyé sur mon bouton, la barre saccade (en appuie sur le bord)... donc en effet, soit je vais utiliser les raycast, soit mettre un un if pour dire que si je suis en contact avec qq chose, je tiens pas compte de l'appuie sur la touche horizontale :modo:

Merci encore, tu gères!!! :super:

Répondre

Revenir vers « Scripting »