Tu vas dans l'onglet Edit > Preferences > External Tools : Et tu peux choisir ton External script editor (donc Monodevelop pour toi).
Bien le bonjour
Je débute dans la programmation sur Unity 2D et j'ai besoin de votre aide / de vos conseils.
J'ai un personnage que j'ai réussis à animer pour le faire marcher, a gauche comme à droite ( avec son animation crée avec l'animator ) et un "saut" ( le personnage ne fait que se déplacer vers le haut a une certaine hauteur.
J'ai quelques soucis. Dans un premier temps, je sens que mon saut est vraiment pas optimal. Lorsque je rappuie sur la touche de saut et que le personnage est encore en l'air, il me fait des choses assez étrange. J'imagine que la logique serait de pouvoir appuyer et faire sauter le personnage UNIQUEMENT s'il se trouve sur le sol. Mais je n'sais pas comment m'y prendre dans le code pour faire une relation entre le joueur et le collider du sol.
Dans un second temps, la gravité de Unity me pose soucis. En fait, j'en viens à me demander si elle m'est vraiment utile. Elle a l'air plus galère qu'autre chose. Constatez : Lorsque je suis proche du vide et que je me rattrape, mon persos fait n'importe quoi.
Voici mon script :
using UnityEngine;
using System.Collections;public class CharacterV1 : MonoBehaviour {
private Animator Anim; // Animer le sprite
public float Speed; // vitesse de déplacement du joueur
public float jumpSpeed;
private Rigidbody2D Rb; // Récupérer si le joueur bouge ou pas// Use this for initialization
void Start ()
{
Anim = GetComponent<Animator>();
Rb = GetComponent<Rigidbody2D>();
}// Update is called once per frame
void Update ()
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.position += new Vector3 (Speed * Time.deltaTime, 0, 0);
transform.localScale = new Vector3 (1, 1, 1);
Anim.SetFloat("speed", 1);
}
else if (Input.GetKey(KeyCode.LeftArrow))
{
transform.position -= new Vector3 (Speed * Time.deltaTime, 0, 0);
transform.localScale = new Vector3 (-1, 1, 1);
Anim.SetFloat("speed", 1);
}
else
{
Anim.SetFloat("speed", 0);
}if (Input.GetKey(KeyCode.UpArrow))
{
transform.position += new Vector3 (0, jumpSpeed * Time.deltaTime,0);
transform.localScale = new Vector3 (1, 1, 1);
}}
}
J'ai l'impression que le vector3 n'est pas necessaire non plus et que je pourrais tout faire en vector2, exact ?
Je vous remercie d'avance pour votre temps.
"transform.position += new Vector3 (Speed * Time.deltaTime, 0, 0);"
Pas sûr, transform.position est un vector3 de toute façon. Il y aurait au mieux une conversion implicite, mais plus certainement une erreur de compilation.
Ensuite, la boîte de collision du personnage n'a pas de rotation bloquée? Je ne sais pas si c'est volontaire ou non mais aucun jeu 2D ne laisse de rotation active sur ses personnages, aucun ne le laisse pencher dans le vide puis tomber comme si c'était une brique, cela pourrait mériter d'être reconsidéré et corrigerait pas mal de problèmes
Utiliser le moteur physique et l'attribution explicite de position (transform.position = ...) est généralement une très mauvaise idée (on pourrait vouloir simuler un saut en mettant des positions successives dans le transform mais le moteur physique n'en tiendrait pas compte, etc), choisis entre les deux.
Enfin le rigidbody doit avoir une variable qui dit s'il est en contact avec un objet, cela peut toujours s'utiliser dans une condition pour décider si on valide ou non le saut.
Le 31 juillet 2016 à 16:50:40 caelacanthe a écrit :
"transform.position += new Vector3 (Speed * Time.deltaTime, 0, 0);"Pas sûr, transform.position est un vector3 de toute façon. Il y aurait au mieux une conversion implicite, mais plus certainement une erreur de compilation.
Ensuite, la boîte de collision du personnage n'a pas de rotation bloquée? Je ne sais pas si c'est volontaire ou non mais aucun jeu 2D ne laisse de rotation active sur ses personnages, aucun ne le laisse pencher dans le vide puis tomber comme si c'était une brique, cela pourrait mériter d'être reconsidéré et corrigerait pas mal de problèmes
Utiliser le moteur physique et l'attribution explicite de position (transform.position = ...) est généralement une très mauvaise idée (on pourrait vouloir simuler un saut en mettant des positions successives dans le transform mais le moteur physique n'en tiendrait pas compte, etc), choisis entre les deux.
Enfin le rigidbody doit avoir une variable qui dit s'il est en contact avec un objet, cela peut toujours s'utiliser dans une condition pour décider si on valide ou non le saut.
Oh, merci beaucoup pour la contrainte de la rotation. L'effet brique à disparu, et c'est plutôt cool ^^
Lorsque tu m'énonce le fait que l'attribution de position est une mauvaise idée. En est-ce de même pour le déplacement ? A vrai dire, c'est encore un brouillard pour moi ce moteur physique.
J'imagine qu'il n'est pas forcément utile pour réaliser des actions simple d'un gameplay a la mario n'est ce pas ?
Mais dans ce cas, lorsque je dois définir le saut, il me faut définir la descente c'est ça ?
" En est-ce de même pour le déplacement ? "
Oui. Soit tu déplaces toi-même ton bonhomme à chaque frame, soit tu appliques une force latérale sur le rigidbody mais c'est simple, il n'y a alors presque aucune chance que la jouabilité soit agréable. Laisse le moteur physique pour un décor destructible ou un jeu d'empilage de trucs, mais ça paraît peu adapté à un contrôle de personnage vu de côté.
" Mais dans ce cas, lorsque je dois définir le saut, il me faut définir la descente c'est ça ?"
Oui mais c'est extrêmement facile, le personnage se déplace à chaque frame d'un vecteur défini par les commandes de déplacement et les influences extérieures (comme la gravité), la gravité elle-même est un vecteur vertical (ou le sens que tu veux, en fait ) ajouté à toutes les frames, un saut sera lui-même une addition d'un vecteur allant dans une autre direction de la gravité et peu à peu dégradé par celle-ci, etc.
Mh d'accord, merci pour avoirs pris le temps de me répondre et pour les précisions. Je vais voir ce que je peux faire avec tout ça
Bonjour,
La version 5.4.0f3 est sorti. Est-ce une version stable, je veux dire par là...va t-il y avoir une version améliorée dans les jours à venir (par exemple une V 5.4.1f1) ?
Ça vaut le coup de l'installer dès maintenant ? ...sachant que dans mon cas je ne souhaites pas upgrader à chaque nouvelle version pour éviter les conflits et autres soucis de compatibilité de certains projets ?
Gaetano-GX Je vois pas ce qui te gène tant dans les mises à jour. Une mise à jour rajoute du contenu et si elle est téléchargeable directement sur la page de téléchargement d'Unity, alors c'est une version stable.
Si tu met fréquemment à jour ton logiciel, les "conflits et autres soucis de compatibilité" seront très rare et simple à régler avec des conseils donnés par Unity pour t'aider à Upgrade correctement ton code.
Bref c'est que du bonus et ça coûte pas beaucoup de travail, après je t'avoue que je me met pas souvent à jour, tout simplement parce que je surveille pas la sortie des MaJ, juste de temps en temps je me dis qu'il faudrait m'update.
J'espère que mon message t'auras aidé
Bonsoir tout le monde.
Dans la FAQ, on dit que Unity peut manger du C#, pourtant je vois beaucoup de gens utiliser le javascript. Une raison à cela ou c'est juste la grosse popularité du langage qui fait cela ?
Merci pour ta réponse -Adridu84- !
C'est vrai que je me prend la tête pour rien. Je pense que je vais upgrader aujourd'hui.
En plus, un code "obsolète" (avec des fonctions "obsolète") est souvent accepté ou toléré par Unity; ça provoque des warnings mais rien de grave.
Encore merci pour ta réponse !
[Naeso] Unity + C# = Meilleur combo
Unity a pendant un temps fait la promo du js ou plutôt "UnityScript" parce que c'est un langage qui est un peju "propre" au moteur , il a été adapté et diffère du véritable JavaScript. Mais ce langage a montré ses limites et le C# se révèle un bien meilleur ami, Unity l'a bien compris et le met plus en avant ces derniers temps.
Il est étrange que tu trouve beaucoup de monde en js, ça se fait de plus en plus rare.
Bref j'ai commencé en JS mais je suis passé au C# qui est bien plus sympathique et je te commence de commencer par ça si tu te met à la prog sur Unity
Gaetaon-GX Content de ton retour Au passage, essaie d'éviter les propriétés obsolete, si elles le sont c'est qu'Unity à mis à ton service un remplacement plus optimisé et presque identique à l'utilisation précédente.
Il est étrange que tu trouve beaucoup de monde en js, ça se fait de plus en plus rare.
Bah j'ai regardé vite fait ce topic, je suis tombé sur pas mal de JS
Et je vois énormément de javascript dans ma promo et tout le monde arrête pas d'en parler
Je vois beaucoup plus souvent de C# que de Js sur Unity. A part peut-être avec les débutants, peut être à cause des tutos...
J'ai pas trouvé de statistique d'utilisation, mais sur ce topic de 2009, C# était déjà utilisé par plus de 50% des personnes qui ont répondu, 20% pour JS, et 20% pour les deux à la fois (le reste pour UnityScript qui n'est plus du possible je crois ?).
http://forum.unity3d.com/threads/boo-c-and-javascript-in-unity-experiences-and-opinions.18507/
"Ça vaut le coup de l'installer dès maintenant ? ...sachant que dans mon cas je ne souhaites pas upgrader à chaque nouvelle version pour éviter les conflits et autres soucis de compatibilité de certains projets ? "
C'est une très mauvaise idée de rester sur une vieille version, il vaut mieux upgrader tout le temps pour réparer les trucs qui ne marchent plus au fur et à mesure, plutôt que de se trouver face à un projet globalement non-fonctionnel qu'il faudrait jeter.
Bonjour caelacanthe,
Je viens de faire la mise à jour (V5.4.0f3) et j'ai checké mon code et tout va bien. J'ai que 13 petits warnings parce que j'utilise encore "Application.LoadLevel("...")" à la place de "SceneManager.LoadScene". Mais mon code compile.
Dorénavant je ferais les updates dès que possible.
Merci pour le conseil !
Gaetano-GX Corrige ces erreurs obsolete par contre, elle sont encore active pour l'instant mais dans un moment ce sera juste une erreur, Unity laisse un petit temps aux utilisateurs pour s'adapter. Met à jour ton code car comme je l'ai dis plus tôt :
Au passage, essaie d'éviter les propriétés obsolete, si elles le sont c'est qu'Unity à mis à ton service un remplacement plus optimisé et presque identique à l'utilisation précédente.
Bonjour
Je suis débutant et j'ai crée un script en c# pour que mon joueur puisse se déplacer soit a droite soit a gauche en fonction des touches .
Mais il ne marche pas et voila mon script:
using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour {
Transform myTransform;
// Use this for initialization
void Start () {
myTransform = GetComponent = Transform ();
}
// Update is called once per frame
void Update () {
if(Input.GetAxis("Horizontal"))
myTransform.Translate(new Vector3(Input.GetAxis("Horizontal")0,0))
voila et je tien a vous dire que quand je debug on me dit que le transform après le getcomponent est utilisé comme une variable et on me dit aussi que je dois rajouté 150 parenthèses bref je ne comprend pas pourquoi il ne marche pas
merci d'avance pour votre aide.
myTransform = GetComponent<Transform> ();
Il manque aussi une virgule et un point virgule en fin de ligne
new Vector3(Input.GetAxis("Horizontal"),0,0);
Soit vigilant quand tu copie du code
Merci j'essayerai de faire plus attention la prochaine fois.
Bonjour
Je suis la même personne qui demandée de l'aide avec le script j'ai un autre problème unity me dis qu'il ne peut pas convertir de float en bool .
Désolé de demandé tant d'aide mais je suis débutant.
Merci de votre aide.