Partage
  • Partager sur Facebook
  • Partager sur Twitter

C#/Unity/GoogleVR : Fonction aller/retour

Coder fonction aller retour 1 bouton

    20 décembre 2019 à 17:10:37

    Bonjour, 

    J'ai un projet où le but est de faire bouger des cubes à des coordonnées précises en fonction de scène d'un court-métrage. Jusqu'ici j'ai réussi à faire bouger un ensemble de cube dans des directions différentes en utilisant la fonction event trigger et dans celle-ci le pointer click (toutes deux comprises dans les assets de googleVR). Elles étaient mises sur un gameobject sur lequel je venais cliquer avec le pointeur. 

    Voilà le premier code que j'essaye de développer où toutes les informations sont (au lieu d'être sur un grand code) sur chaque cube avec sa position, sa fonction MoveCube, sa direction, etc. 

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Cube : MonoBehaviour
    {
    
        public float Distance;
        public Vector3 Direction;
        public bool IsCubeOpen = false;
    
        private Vector3 StartPos;
        private Vector3 EndPos;
    
    
        //temps pour aller du point A au point B
        public float lerpTime = 5;
        //this will update Lerptime
        private float currentLerpTime = 0;
    
        void Start()
        {
            StartPos = transform.position;
            EndPos = transform.position + Vector3.right * Distance;
        }
    
        // Update is called once per frame
        void Update()
        { 
            if (transform.position == StartPos)
            {
                IsCubeOpen = false;
            }
    
            if (transform.position == EndPos)
            {
                IsCubeOpen = true;
            }
    
    
        }
    
        public void MoveCube()
        {
            if (IsCubeOpen == true)
            {
                currentLerpTime += Time.deltaTime;
                if (currentLerpTime >= lerpTime)
                {
                    currentLerpTime = lerpTime;
                }
    
                float Perc = currentLerpTime / lerpTime;
    
                transform.position = Vector3.Lerp(StartPos, EndPos, Perc);
            }
            else
            {
                currentLerpTime += Time.deltaTime;
                if (currentLerpTime >= lerpTime)
                {
                    currentLerpTime = lerpTime;
                }
    
                float Perc = currentLerpTime / lerpTime;
    
                transform.position = Vector3.Lerp(StartPos, EndPos, Perc);
            }
    
        }
    }
    

    Le deuxième code est placé sur le bouton, il contient un tableau pour mettre les gameobject concernés dedans et un appel à la fonction MoveCube de ceux-ci. 

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class cubeprojet : MonoBehaviour
    {
        public Cube[] mesCubes;
    
        private bool keyHit = false;
    
    
    
        // Start is called before the first frame update
        void Start()
        {
    
    
        }
    
        public void Scene1()
        {
            keyHit = true;
        }
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.A))
            {
                keyHit = true;
            }
            if (keyHit == true)
    
    
            for (int i = 0; i < mesCubes.Length; i++)
            {
                mesCubes[i].MoveCube();
            }
        }

    Le but serait de créer un boucle qui demande où est la position du cube et surtout de faire en sorte que quand le arrive à la fin de sa position déployer, on puisse ré-appuyer sur le dit bouton pour faire revenir le cube. Et mon niveau de novice ne me permet pas de le faire.

    Merci de vos réponses 

    R.dvd



    • Partager sur Facebook
    • Partager sur Twitter
      31 décembre 2019 à 21:47:22

      Dans le premier code, dans "ModeCube", pourquoi distinguer "IsCubeOpen" true ou false ???

      Je ne comprends pas trop la question.

      Pour inverser l'animation des cubes, il faut juste inverser les 2 premiers paramètres de "Vector3.Lerp"

      -
      Edité par bacelar 4 janvier 2020 à 17:36:49

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        3 janvier 2020 à 11:56:24

        Je déclare "IsCubeOpen" pour savoir si le cube est déployé ou non, et ensuite pouvoir m'en servir pour pouvoir le rétracter.

        Enfaîte le but du code est de pouvoir, sur un même bouton, dire à des cubes de se mettre dans une position prédéfini en cliquant puis quand ils ont atteints cette position et que l'on veut les faire revenir à zéro, re-cliquer pour les faire revenir à leurs positions de base.

        J'ai essayé cette solution mais les cubes ne reviennent pas et semble bloqué sur les premières lignes de la fonction sans jamais passer à la deuxième étape.

        • Partager sur Facebook
        • Partager sur Twitter
          4 janvier 2020 à 22:39:51

          Ne complexifiez pas inutilement votre code.

          using System.Collections;
          using System.Collections.Generic;
          using UnityEngine;
           
          public class Cube : MonoBehaviour
          {
           
              public float Distance;
              public Vector3 Direction;
              public bool IsCubeOpen = false;
           
              private Vector3 StartPos;
              private Vector3 EndPos;
           
           
              //temps pour aller du point A au point B
              public float lerpTime = 5;
              //this will update Lerptime
              private float currentLerpTime = 0;
           
              void Start()
              {
                  StartPos = transform.position;
                  EndPos = transform.position + Vector3.right * Distance;
              }
           
              // Update is called once per frame
              void Update()
              {
                  if (transform.position == EndPos)
                  {
                      Vector3 tmp = EndPos;
                      EndPos = StartPos;
                      StartPos = tmp;
          
                      IsCubeOpen = !IsCubeOpen;
                  }
              }
           
              public void MoveCube()
              {
                  currentLerpTime += Time.deltaTime;
          
                  if (currentLerpTime >= lerpTime)
                  {
                      currentLerpTime = lerpTime;
                  }
           
                  float Perc = currentLerpTime / lerpTime;
           
                  transform.position = Vector3.Lerp(StartPos, EndPos, Perc);
          
              }
          }

          Je ne suis pas très confiant sur la stabilité numériue de cette solution, mais je n'ai toujours pas une vue claire de votre "problème".

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

          C#/Unity/GoogleVR : Fonction aller/retour

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown