erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
leslie2017
Messages : 5
Inscription : 14 Oct 2022 14:31

erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Message par leslie2017 » 20 Oct 2022 10:56

Je tiens à préciser que je suis novice en développement...fichier c# contenant le code des jumeaux virtuels qui doit s'afficher sur unity quand je présente mon mans devant la web cam mais j'obtiens des erreurs sur unity quand je veux pour exécuter le code afin d'obtenir les jumeaux 3D BESOIN D'AIDE s'il vous plaît :pleur4: :pleur4:

voici la video youtube qui montre ce que je suis entrain de vouloir faire mais avec deux mais au lieu de deux comme sur la video
3D HAND TRACKING
1.png
code c# hand tracking pour une main
1.png (76.84 Kio) Consulté 3051 fois
2.png
code c# hand tracking pour deux mains
2.png (77.98 Kio) Consulté 3051 fois

Code : Tout sélectionner

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

public class HandTracking1 : MonoBehaviour
{
    // Start is called before the first frame update
    public UDPReceive udpReceive;
    public GameObject[] HandPoints;
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        string data = udpReceive.data;

        //data = data.Remove(0, 1);

        //data = data.Remove(data.Length-1, 1);
        //print(data);
        string[] points = data.Split(',');
        //print(points[0]);


        for (int i = 21; i<42; i++)
        {
            float x = 8-float.Parse(points[i*3])/100;
            float y = float.Parse(points[i*3 +1]) / 100;
            float z = float.Parse(points[i*3 +2]) / 100;

            //print(i);

            HandPoints[i].transform.localPosition = new Vector3(x, y, z);
            

        }


    }
}

errorr:

(1) ArgumentOutOfRangeException : l'index et le nombre doivent faire référence à un emplacement dans la chaîne. Nom du paramètre : count System.String.Remove (System.Int32 startIndex, System.Int32 count) (at <6073cf49ed704e958b8a66d540dea948>:0) HandTracking.Update () (at Assets/HandTracking.cs:20)

(2) IndexOutOfRangeException : l'index était en dehors des limites du tableau. HandTracking1.Update () (dans Assets/HandTracking1.cs:30)





le code UDP RECEIVE
3.png
code UDP pour la communication entre le code cvzone pour la reconnaissance des deux mains
3.png (47.44 Kio) Consulté 3051 fois

Code : Tout sélectionner

using UnityEngine;
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

public class UDPReceive : MonoBehaviour
{

    Thread receiveThread;
    UdpClient client; 
    public int port = 5052;
    public bool startRecieving = true;
    public bool printToConsole = false;
    public string data;


    public void Start()
    {

        receiveThread = new Thread(
            new ThreadStart(ReceiveData));
        receiveThread.IsBackground = true;
        receiveThread.Start();
    }


    // receive thread
    private void ReceiveData()
    {

        client = new UdpClient(port);
        while (startRecieving)
        {

            try
            {
                IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0);
                byte[] dataByte = client.Receive(ref anyIP);
                data = Encoding.UTF8.GetString(dataByte);

                if (printToConsole) { print(data); }
            }
            catch (Exception err)
            {
                print(err.ToString());
            }
        }
    }

}


ERROR:


(3) SocketException: Une seule utilisation de chaque adresse de socket (protocole/adresse réseau/port) est habituellement autorisée.
System.Net.Sockets.Socket.Bind (System.Net.EndPoint localEP) (at <6d7c4c8dd3624dc596686fb7270ae1e6>:0)
System.Net.Sockets.UdpClient..ctor (System.Int32 port, System.Net.Sockets.AddressFamily family) (at <6d7c4c8dd3624dc596686fb7270ae1e6>:0)
System.Net.Sockets.UdpClient..ctor (System.Int32 port) (at <6d7c4c8dd3624dc596686fb7270ae1e6>:0)
UDPReceive.ReceiveData () (at Assets/UDPReceive.cs:33)
System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) (at <6073cf49ed704e958b8a66d540dea948>:0)
System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) (at <6073cf49ed704e958b8a66d540dea948>:0)
System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) (at <6073cf49ed704e958b8a66d540dea948>:0)
System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) (at <6073cf49ed704e958b8a66d540dea948>:0)
System.Threading.ThreadHelper.ThreadStart () (at <6073cf49ed704e958b8a66d540dea948>:0)
UnityEngine.<>c:<RegisterUECatcher>b__0_0(Object, UnhandledExceptionEventArgs)

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Message par Max » 20 Oct 2022 13:46

Bonjour,

la première erreur dans HandTracking.cs est certainement du au fait que 'data' est très certainement une chaine vide, ce qui fait que data.Remove(0,1) te renvoie un ArgumentOutOfRangeException .
A toi de remonter l'info et de déterminer pourquoi data est vide à ce moment là.

PS: poste plutôt ton code directement (en utilisant les balises prévues) et non des screens, c'est plus pratique pour tout le monde. En cas de doute, tu as la procédure ici.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

leslie2017
Messages : 5
Inscription : 14 Oct 2022 14:31

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Message par leslie2017 » 21 Oct 2022 09:54

PREMIER CODE POUR AFFICHAGE D'UNE MAIN

Code : Tout sélectionner

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

public class HandTracking : MonoBehaviour
{
    // Start is called before the first frame update
    public UDPReceive udpReceive;
    public GameObject[] handPoints;
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        string data = udpReceive.data;

        data = data.Remove(0, 1);
        data = data.Remove(1, 1);
        data = data.Remove(data.Length-2, 1);
        data = data.Remove(data.Length-1, 1);
        print(data);
        string[] points = data.Split(',');
        print(points[0]);


        for (int i = 0; i<21; i++)
        {
            float x = 8-float.Parse(points[i*3])/100;
            float y = float.Parse(points[i*3 +1])/100;
            float z = float.Parse(points[i*3 +2])/100;

            handPoints[i].transform.localPosition = new Vector3(x, y, z);

        }


    }
}




ERROR:


ArgumentOutOfRangeException: Index and count must refer to a location within the string.
Parameter name: count
System.String.Remove (System.Int32 startIndex, System.Int32 count) (at <6073cf49ed704e958b8a66d540dea948>:0)
HandTracking.Update () (at Assets/HandTracking.cs:20)

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Message par Max » 21 Oct 2022 10:47

Bonjour,

comme je te l'ai suggéré plus haut, le soucis est certainement du au fait que 'data' est une chaine vide, ce qui fait que data.Remove(0,1) te renvoie un ArgumentOutOfRangeException .
A toi de remonter l'info et de déterminer pourquoi data est vide à ce moment là.
Tu peux par exemple controler la valeur de data en ajoutant après la ligne string data = udpReceive.data; la ligne Debug.Log("valeur de data: "+data);
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

leslie2017
Messages : 5
Inscription : 14 Oct 2022 14:31

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Message par leslie2017 » 24 Oct 2022 11:57

je tiens à rappeler une fois de plus que je suis nouvelle dans tout ce qui est unity et développement C# python etc.....

merci j'ai résolu cette partie mais je rencontre une autre erreur sur unity qui indique le problème vient de la ligne 46

je mets des captures sur ce qui se passe lorsque je run le code sur unity pour que vous voyez ceux à quoi je fais face...
je suis sensé avoir l'affichage de deux mains virtuel mais lorsque je présente les deux mains je reçois cette erreur et une seule main.

besoin d'aide s'il vous plait merci d'avance!!!

Code : Tout sélectionner

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

public class HandTracking1 : MonoBehaviour
{
    // Start is called before the first frame update
    public UDPReceive udpReceive;
    public GameObject[] handPoints;
    void Start()
    {
        
    }

    void Update()
    {
        string data = udpReceive.data;
        print("Here111111 : " + data);

        if(data!=""){
        
    


        data = data.Remove(0, 1);
        data = data.Remove(1, 1);
        data = data.Remove(data.Length-2, 1);
        data = data.Remove(data.Length-1, 1);
        print("data11111 "+ data);
        string[] points = data.Split(',');
        print("Length1111 " + points.Length);
        print("Points1111 " + points[0]);

    

        handPoints=new GameObject[21];

        for (int i = 0; i<42; i++)
        {
            float x = float.Parse(points[i*3])/100;
            float y = float.Parse(points[i*3 +1])/100;
            float z = float.Parse(points[i*3 +2])/100;

            print("Vector3 : ( " + x + " , " + y + " , " + z + " )");

(46)      handPoints[i].transform.localPosition = new Vector3(x, y, z);

        }
            print("HandPoints Size "+ handPoints.Length);

        }
    }



l'erreur que je reçois dans le code est :

NullReferenceException: Object reference not set to an instance of an object
HandTracking1.Update () (at Assets/HandTracking1.cs:46)
Pièces jointes
erreur deux mains.png
erreur après avoir run le code
erreur deux mains.png (222.17 Kio) Consulté 2687 fois
points la.png
avant de run le programme sur unity
points la.png (197.21 Kio) Consulté 2687 fois

Avatar de l’utilisateur
jmhoubre
Messages : 859
Inscription : 05 Oct 2019 22:05

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Message par jmhoubre » 24 Oct 2022 14:13

Bonjour,

quand tu fais

Code : Tout sélectionner

handPoints=new GameObject[21];
Tu crées l'objet handPoints, avec 21 références vides. Pour t'en convaincre, fait juste après :

Code : Tout sélectionner

handPoints=new GameObject[21];
Debug.Log(handPoints[0]):
Dans ta boucle avant la ligne 46, ajoute :

Code : Tout sélectionner

handPoints[i] = new GameObject();
Par ailleurs, sur ton objet Manager, il y a 2 fois le script HandTracking. Ce n'est pas nécessaire.

Enfin, quand on débute l'alpinisme, on ne commence pas par l'Everest. Je te conseille d'aller voir ce post destiné aux débutants. Tu risques de te décourager en attaquant à des sujets qui ne sont pas faits pour toi. Les parcours de formation Unity sont très bien faits (si l'anglais n'est pas un problème pour toi), je les ai faits tous les trois, et j'ai appris beaucoup de choses.

leslie2017
Messages : 5
Inscription : 14 Oct 2022 14:31

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Message par leslie2017 » 24 Oct 2022 15:22

Merci!
enfaîte je n'ai pas choisi ce projet on me l'a donné pour le stage moi je fais dans le réseau ...
C'est pa première fois de me retrouver dans un stage autre que mon domaine et c'est pas très évident pour moi....

Avatar de l’utilisateur
jmhoubre
Messages : 859
Inscription : 05 Oct 2019 22:05

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Message par jmhoubre » 24 Oct 2022 16:22

Par curiosité, quel est l'endroit ou l'école dans lequel on fixe de tels stages à des débutants ?
As-tu un directeur de stage ? Pourquoi ne t'aide-t-il pas ?

leslie2017
Messages : 5
Inscription : 14 Oct 2022 14:31

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Message par leslie2017 » 24 Oct 2022 17:06

C'est long à expliquer...on e s'y attendait vraiment pas

Répondre

Revenir vers « (C#) CSharp »