Page 1 sur 1

[DB-AL] Problème de jonction de programme

Publié : 28 Oct 2019 23:25
par Stread91
Bonjour/Bonsoir à tous. j'ai récemment commencé à utiliser Unity, je suis donc débutant+++ dans la matière.
-J'ai commencé par créé un simple projet d'animation qui faisait monter et descendre une Sphère lorsque je cliqué sur ''1"

https://www.youtube.com/watch?v=gHHq-rUVHQ4

-J'ai ensuite créé un nouveau projet qui lui me permet de déplacer une Sphère grâce à Z/Q/S/D

J'ai donc naturellement eu l'idée de créer un projet réunissant les deux, c'est à dire un mouvement avec Z/Q/S/D et lorsque le "1" est utilisé, l'animation se lance.

Mais c'est ici que ce situe mon problème.

https://www.youtube.com/watch?v=LVi8LJfuPRw

Merci d'avance à ceux ou celles qui pourront me venir en aide !

Ci dessous les programmes :

mouvement sphere : https://gyazo.com/632ec051519105232eadd7ca0d57e816

Animation : https://gyazo.com/8cd00c9ed6da5402ef035a7b3f39c246

Re: [DB-AL] Problème de jonction de programme

Publié : 29 Oct 2019 10:06
par boubouk50
Bonjour Stread91,

S'il te plait, pour le code, utilise les balises Code prévues à cet effet directement dans le message.
D'après le message d'erreur, l'input key n'a pas de nom: Input key named: is unknown.. Normalement, le nom est affiché. J'en conclus donc que tu n'as pas initialisé inputFront, que la chaîne de caractères est donc vide.

Re: [DB-AL] Problème de jonction de programme

Publié : 29 Oct 2019 11:50
par Stread91
J'ai essayer une autre alternative et cette fois je peux tourner sur moi même (avec Q/D) et faire l'animation mais je ne peux pas avancer, j'ai comme l'impression qu'aucune transform.Translate n'est possible. Le problème vient-il de mon animation ? Qui bloquerai les mouvements ?

Re: [DB-AL] Problème de jonction de programme

Publié : 29 Oct 2019 12:02
par boubouk50
Alors oui, il faut faire attention à la mise en place des tes éléments:
L'animation modifie les transformations de ton objet (position, rotation et échelle) tout comme toi avec les inputs. Il va donc y avoir conflit.
Ce qu'il faut faire c'est hiérarchiser tout ça. Par exemple, tu peux mettre ta sphère sous un Empty GameObject pour séparer les contrôles > Empty = Input, Sphere = Animation. Ainsi, la sphère est modifiée par l'animation et l'Empty parent est modifié par les Inputs. Il n'y a plus de conflit.

Re: [DB-AL] Problème de jonction de programme

Publié : 29 Oct 2019 12:11
par Stread91
Ahhh ok je comprend mieux, je faisais agir plusieurs chose sur un même objet qui se ''contre dise" .

Bon je vais essayer de comprendre et exécuter ta solution.

Re: [DB-AL] Problème de jonction de programme

Publié : 29 Oct 2019 12:27
par Stread91
Ookkk okkk, ça à l'air de commencer à ressemble à quelque chose.

Mais un autre problème vient d’apparaître, les débuts et fin d'animation sont pas fou mais bon le problème n'est pas là, c'est plutôt le fait que je vole pendant l'animation combiné à la translation xD

https://www.youtube.com/watch?v=JgURdldw7-8

Vous aurez une solution ?

(en tout cas merci de la solution précédente)

Re: [DB-AL] Problème de jonction de programme

Publié : 29 Oct 2019 12:40
par boubouk50
Si tu codes avec les pieds, je te dirais de remonter le clavier au niveau des mains. ;-)

Si ton objet s'envole, c'est que tu l'as programmé ainsi. Rien n'est fait par hasard.
Si tu veux de l'aide là dessus, balance ton code de déplacement (en entier merci) ici dans des balises code (le 5e bouton du menu d'édition)

Re: [DB-AL] Problème de jonction de programme

Publié : 29 Oct 2019 12:47
par Stread91
Code mouvement :

Code : Tout sélectionner

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

public class CharacterMotor : MonoBehaviour
{
    //ms
    public float walkSpeed;
    public float runSpeed;
    public float turnSpeed;

    //Inputs
    public string inputFront;
    public string inputBack;
    public string inputLeft;
    public string inputRight;

    public Vector3 jumpSpeed;
    CapsuleCollider playerCollider;




    void Start()
    {
        playerCollider = gameObject.GetComponent<CapsuleCollider>();

    }

    void Update()
    {
        //Déplacement
        if (Input.GetKey(inputFront) && !Input.GetKey(KeyCode.LeftShift))
        {
            transform.Translate(0, 0, walkSpeed * Time.deltaTime);
        }

        if (Input.GetKey(inputBack))
        {
            transform.Translate(0, 0, -walkSpeed * Time.deltaTime);
        }

        if (Input.GetKey(inputLeft))
        {
            transform.Rotate(0, -turnSpeed * Time.deltaTime, 0);
        }

        if (Input.GetKey(inputRight))
        {
            transform.Rotate(0, turnSpeed * Time.deltaTime, 0);
        }

        //Sprint
        if (Input.GetKey(inputFront) && Input.GetKey(KeyCode.LeftShift))
        {
            transform.Translate(0, 0, runSpeed * Time.deltaTime);
        }
    }
}
Code animation :

Code : Tout sélectionner

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

public class animControl : MonoBehaviour
{

    public Animator anim;

    void Start()
    {
        anim = GetComponent<Animator>();
    }

    void Update()
    {
        if (Input.GetKey("z"))
        {
            anim.SetBool("up", true);
        }
        else
        {
            anim.SetBool("up", false);
        }
    }
}
Critique comme il se doit, j'ai commencer avant hier et suis donc le plus gros néophyte dans le monde du code.
Ça m'aidera pour les prochaines ;-)

Re: [DB-AL] Problème de jonction de programme

Publié : 29 Oct 2019 13:14
par Stread91
Ok j'ai trouvé une solution. Mais un autre problème est apparu !

Lorsque je fini mon mouvement la sphère augmente de plus en plus sa hauteur :

https://www.youtube.com/watch?v=ZN3usTvBiwQ

J'ai essayer de lui ajouter de la gravité mais elle est attiré trop fort vers le sol ? Possible de diminué la gravité sur cette objet ?

Re: [DB-AL] Problème de jonction de programme

Publié : 29 Oct 2019 15:55
par boubouk50
Oui alors là ça va pas du tout, ce n'est plus une question de programmation mais de connaissance sur le fonctionnement du contrôle d'un personnage.
Ta sphère possède un rigidbody, tu dois donc utiliser la physique du moteur pour les déplacements. Et cela passe par le rigidbody et non pas par le transform du gameObject.

Avant d'aller plus loin, je te conseille de te renseigner sur le Character Controller. Sur ce forum et sur le net.
Tu peux t'aider de la documentation (manual) pour la théorie sur le rigidbody, des Unity Learn pour les explications et tutos (officiels donc en anglais) et enfin d'exemples. (Dans les StandardAssets d'Uinty Technology, tu as un exemple de Caracter Controller, le First Person Controller.)
Tu peux chercher un peu sur l'Asset Store aussi, tu dois aussi avoir des Controllers gratuits pour fouiller dans le code et le Setup du rigidbody.