Que ferait un vrai codeur ?

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
yas180
Messages : 13
Inscription : 21 Oct 2014 14:27

Que ferait un vrai codeur ?

Message par yas180 » 19 Nov 2014 15:59

Bonjour à tous, je suis confronté à deux problèmes et étant quand même débutant, tant en Unity qu'en Js Unity, mes solutions s'apparentent à du système D et sont vraiment casse gueule. C'est pour cette raison que je demande l'avis des personnes de se forum qui sont à mon avis bien meilleurs que moi.

- Le premier problème est d'empêcher mon personnage d'escalader les montagnes avec une pente trop forte. Je voudrai utiliser un système comme celui du "slope limt" du charactère controller mais appliqué au capsule collider de mon personnage.

- Le second problème est la gestion de ma téléportation. Lorsque je charge un nouveau niveaux je voudrai que mon personnage soit téléporté à un endroit précis. J'ai donc utilisé this.transform.position. Le problème avec la dernière commande c'est qu'après mon personnage ne peut plus se déplacer.

soumois
Messages : 32
Inscription : 12 Oct 2014 02:25

Re: Que ferait un vrai codeur ?

Message par soumois » 19 Nov 2014 16:11

Pour le premier, tu peux regarder la normal du premier point de contact avec le sol ça te donnera l'angle du sol si tu le compares par rapport à un Vector3.right. Aprés à toi de traiter cette information ( c'est à dire si ton personnage ne peut plus avancer, voir même qu'il glisse )

Pour le second, c'est peut être dans ton script car comme ça, je ne vois pas pourquoi ton personnage ne pourrait plus bouger aprés avoir modifier ton transform.position.

yas180
Messages : 13
Inscription : 21 Oct 2014 14:27

Re: Que ferait un vrai codeur ?

Message par yas180 » 19 Nov 2014 16:42

Merci pour ta réponse :D

Pour le second je pense que mon erreur vient du fait que j'ai mis la fonction qui contient la téléportation dans la fonction Update, mais du coup où je la mes pour que l'ordinateur teste bien la condition ?
Es que tu pourrais expliciter ta réponse pour mon premier problème, ce n'est pas que je sois fâché avec les math mais un peu plus de détail m'aiderai à comprendre

soumois
Messages : 32
Inscription : 12 Oct 2014 02:25

Re: Que ferait un vrai codeur ?

Message par soumois » 19 Nov 2014 17:16

Voilà un exemple de code :

Code : Tout sélectionner

void OnCollisionEnter(Collision collision ){
    // On recupére la normal
    Vector3 normal = 	collision.contacts[0].normal;

    // Il me semble que tu dois multiplier par un nombre pour obtenir l'angle réel, mais je ne m'en rappele plus comme ça
    // Tu n'as qu'à tester avec un sol à 0°, 45° , 90° et tu devrais pouvoir trouver ce nombre facilement ^^
    print(" angle X = "+(normal.x) ); 
}

Pour le premier cas, je pense que tu restes dans la conditions de téléportations car cela ne pose pas probléme que cela se passe dans le update et donc l'objet se "teleporte" toujours au même endroit, ce qui fait qu'il ne bouge pas. Regarde bien si tu ne rentres pas en permanence dans ta condition via un print.

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Que ferait un vrai codeur ?

Message par Alesk » 19 Nov 2014 23:29

Désolé soumois, ton explication est mauvaise pour le coup de l'angle de la normale ;)

La normale de représente pas un angle, mais un vecteur directeur.
Pour connaitre l'angle entre deux normales, il faut utiliser la fonction Vector3.Angle(n1,n2), qui va te retourner la valeur en degrés, dans ton cas ça sera :

Code : Tout sélectionner

float angle = Vector3.Angle(Vector3.up,normaleDuPointDeCollision);
Ensuite pour le coup de la téléportation, il vaut mieux procéder autrement : dans chaque niveau, tu utilises un gameobject vide, sur lequel tu colleras un script qui positionnera ton joueur à la position de ce gameobject, par exemple :

Code : Tout sélectionner

void Start(){
    GameObject player = GameObject.Find("nomDuGameObjectDeTonPlayer");
    if(player != null) player.transform.position = this.transform.position;
}
Dernière édition par Alesk le 20 Nov 2014 12:43, édité 1 fois.

yas180
Messages : 13
Inscription : 21 Oct 2014 14:27

Re: Que ferait un vrai codeur ?

Message par yas180 » 19 Nov 2014 23:39

Merci pour tes réponses Soumoi, j'ai réglé très vite le second problème après ce que tu m'as dit mais je ne comprend pas ta méthode pour empêcher mon personnage d'escalader des montagnes. J'ai eu un bac ES et je n'était pas trop mauvais en mathématique mais je ne comprend pas. Si tu as le temps ça m'aiderait que tu explicite complément

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Que ferait un vrai codeur ?

Message par Alesk » 20 Nov 2014 12:43

Heuuu... ça sert à quoi que je réponde du coup ? :roll:

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Que ferait un vrai codeur ?

Message par ZJP » 20 Nov 2014 15:06

Alesk a écrit :Heuuu... ça sert à quoi que je réponde du coup ? :roll:
En effet :mrgreen:

soumois
Messages : 32
Inscription : 12 Oct 2014 02:25

Re: Que ferait un vrai codeur ?

Message par soumois » 20 Nov 2014 16:51

Alesk a écrit :Désolé soumois, ton explication est mauvaise pour le coup de l'angle de la normale ;)

La normale de représente pas un angle, mais un vecteur directeur.
Pour connaitre l'angle entre deux normales, il faut utiliser la fonction Vector3.Angle(n1,n2), qui va te retourner la valeur en degrés, dans ton cas ça sera :

Code : Tout sélectionner

float angle = Vector3.Angle(Vector3.up,normaleDuPointDeCollision);
Ensuite pour le coup de la téléportation, il vaut mieux procéder autrement : dans chaque niveau, tu utilises un gameobject vide, sur lequel tu colleras un script qui positionnera ton joueur à la position de ce gameobject, par exemple :

Code : Tout sélectionner

void Start(){
    GameObject player = GameObject.Find("nomDuGameObjectDeTonPlayer");
    if(player != null) player.transform.position = this.transform.position;
}
Ah autant pour moi,
c'est juste qu'en faisant :

Code : Tout sélectionner

float angle = hit.normal.x *90 ;
Sa marchait ^^ ( je suis en 2.5D )

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Que ferait un vrai codeur ?

Message par Alesk » 20 Nov 2014 17:20

soumois a écrit : Ah autant pour moi,
c'est juste qu'en faisant :

Code : Tout sélectionner

float angle = hit.normal.x *90 ;
Sa marchait ^^ ( je suis en 2.5D )
oué mais c'est un coup de bol

Répondre

Revenir vers « Scripting »