Que ferait un vrai codeur ?
Que ferait un vrai codeur ?
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.
- 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.
Re: Que ferait un vrai codeur ?
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.
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.
Re: Que ferait un vrai codeur ?
Merci pour ta réponse
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
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
Re: Que ferait un vrai codeur ?
Voilà un exemple de code :
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.
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) );
}
Re: Que ferait un vrai codeur ?
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 :
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 :
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);
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.
Re: Que ferait un vrai codeur ?
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
Re: Que ferait un vrai codeur ?
Heuuu... ça sert à quoi que je réponde du coup ?
Re: Que ferait un vrai codeur ?
En effetAlesk a écrit :Heuuu... ça sert à quoi que je réponde du coup ?
Re: Que ferait un vrai codeur ?
Ah autant pour moi,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 :
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
float angle = Vector3.Angle(Vector3.up,normaleDuPointDeCollision);
Code : Tout sélectionner
void Start(){ GameObject player = GameObject.Find("nomDuGameObjectDeTonPlayer"); if(player != null) player.transform.position = this.transform.position; }
c'est juste qu'en faisant :
Code : Tout sélectionner
float angle = hit.normal.x *90 ;
Re: Que ferait un vrai codeur ?
oué mais c'est un coup de bolsoumois a écrit : Ah autant pour moi,
c'est juste qu'en faisant :
Sa marchait ^^ ( je suis en 2.5D )Code : Tout sélectionner
float angle = hit.normal.x *90 ;