Search Unity

Bug Not responding on calling an API for joints' data on each frame

Discussion in 'Editor & General Support' started by muhibahmed2000, Jan 17, 2023.

  1. muhibahmed2000

    muhibahmed2000

    Joined:
    Jan 7, 2023
    Posts:
    1
    Hey there,
    I'm trying to call a custom-made API on each frame that provides position vectors in JSON form which then I use to set the transforms of some spheres in my scene.
    Unity becomes unresponsive after a few seconds.
    Hardcoding all this data works fine..

    Code (CSharp):
    1. using UnityEngine;
    2. using System.IO;
    3.  
    4. using System.Net;
    5.  
    6.  
    7. public class manipulate: MonoBehaviour {
    8.     public Transform avatar_trans;
    9.  
    10.     public TextAsset jsonFile;
    11.     // public JointsResponse jointsReponse;
    12.     public FrameData jsonFrameData;
    13.  
    14.     // public int counter = 1;
    15.  
    16.     public HttpWebRequest request;
    17.     public HttpWebResponse response;
    18.  
    19.     public Transform root;
    20.     public Transform lhipjoint;
    21.     public Transform lfemur;
    22.     public Transform ltibia;
    23.     public Transform lfoot;
    24.     public Transform ltoes;
    25.     public Transform rhipjoint;
    26.     public Transform rfemur;
    27.     public Transform rtibia;
    28.     public Transform rfoot;
    29.     public Transform rtoes;
    30.     public Transform lowerback;
    31.     public Transform upperback;
    32.     public Transform thorax;
    33.     public Transform lowerneck;
    34.     public Transform upperneck;
    35.     public Transform head;
    36.     public Transform lclavicle;
    37.     public Transform lhumerus;
    38.     public Transform lradius;
    39.     public Transform lwrist;
    40.     public Transform lhand;
    41.     public Transform lfingers;
    42.     public Transform lthumb;
    43.     public Transform rclavicle;
    44.     public Transform rhumerus;
    45.     public Transform rradius;
    46.     public Transform rwrist;
    47.     public Transform rhand;
    48.     public Transform rfingers;
    49.     public Transform rthumb;
    50.  
    51.     // Start is called before the first frame update
    52.     void Start() {
    53.         root = avatar_trans.Find("root");
    54.  
    55.         lhipjoint = root.Find("lhipjoint");
    56.         lfemur = lhipjoint.Find("lfemur");
    57.         rhipjoint = root.Find("rhipjoint");
    58.         rfemur = rhipjoint.Find("rfemur");
    59.  
    60.  
    61.  
    62.         root = avatar_trans.Find("root");
    63.         lhipjoint = root.Find("lhipjoint");
    64.         lfemur = lhipjoint.Find("lfemur");
    65.         ltibia = lfemur.Find("ltibia");
    66.         lfoot = ltibia.Find("lfoot");
    67.         ltoes = lfoot.Find("ltoes");
    68.         rhipjoint = root.Find("rhipjoint");
    69.         rfemur = rhipjoint.Find("rfemur");
    70.         rtibia = rfemur.Find("rtibia");
    71.         rfoot = rtibia.Find("rfoot");
    72.         rtoes = rfoot.Find("rtoes");
    73.         lowerback = root.Find("lowerback");
    74.         upperback = root.Find("upperback");
    75.         thorax = upperback.Find("thorax");
    76.         lowerneck = thorax.Find("lowerneck");
    77.         upperneck = thorax.Find("upperneck");
    78.         head = upperneck.Find("head");
    79.         lclavicle = upperneck.Find("lclavicle");
    80.         lhumerus = lclavicle.Find("lhumerus");
    81.         lradius = lhumerus.Find("lradius");
    82.         lwrist = lradius.Find("lwrist");
    83.         lhand = lwrist.Find("lhand");
    84.         lfingers = lhand.Find("lfingers");
    85.         lthumb = lfingers.Find("lthumb");
    86.         rclavicle = upperneck.Find("rclavicle");
    87.         rhumerus = rclavicle.Find("rhumerus");
    88.         rradius = rhumerus.Find("rradius");
    89.         rwrist = rradius.Find("rwrist");
    90.         rhand = rwrist.Find("rhand");
    91.         rfingers = rhand.Find("rfingers");
    92.         rthumb = rfingers.Find("rthumb");
    93.  
    94.  
    95.  
    96.         request = (HttpWebRequest) WebRequest.Create("http://localhost:8000/motion/0"); // Set Motion
    97.  
    98.         response = (HttpWebResponse) request.GetResponse();
    99.  
    100.         request = (HttpWebRequest) WebRequest.Create("http://localhost:8000/frame");
    101.  
    102.         response = (HttpWebResponse) request.GetResponse();
    103.  
    104.         var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    105.  
    106.         print(responseString);
    107.         jsonFrameData = JsonUtility.FromJson < FrameData > (responseString);
    108.         // string jsonString = JsonSerializer.Serialize(responseString);
    109.  
    110.  
    111.         // print(jsonFrameData.jointdata[0]);
    112.  
    113.         setJoints(0);
    114.  
    115.  
    116.     }
    117.  
    118. int counter = 1;
    119.     // Update is called once per frame
    120.     void FixedUpdate() {
    121.     print(counter);
    122.        
    123.         // if (counter % 5 == 0) {
    124.         request = (HttpWebRequest) WebRequest.Create("http://localhost:8000/frame");
    125.  
    126.         response = (HttpWebResponse) request.GetResponse();
    127.             counter = 0;
    128.         var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    129.         jsonFrameData = JsonUtility.FromJson < FrameData > (responseString);
    130.         // }
    131.  
    132.  
    133.  
    134.         // print(responseString);
    135.  
    136.  
    137.         setJoints(0);
    138.         counter = counter + 1;
    139.  
    140.  
    141.  
    142.  
    143.     }
    144.  
    145.     Vector3 floatToVector(double x, double y, double z) {
    146.         return new Vector3((float) x, (float) y, (float) z);
    147.     }
    148.  
    149.     void setJoints(int i) {
    150.         root.position = jsonFrameData.jointdata[i].get_joint("root");
    151.         lhipjoint.position = jsonFrameData.jointdata[i].get_joint("lhipjoint");
    152.         lfemur.position = jsonFrameData.jointdata[i].get_joint("lfemur");
    153.         ltibia.position = jsonFrameData.jointdata[i].get_joint("ltibia");
    154.         lfoot.position = jsonFrameData.jointdata[i].get_joint("lfoot");
    155.         ltoes.position = jsonFrameData.jointdata[i].get_joint("ltoes");
    156.         rhipjoint.position = jsonFrameData.jointdata[i].get_joint("rhipjoint");
    157.         rfemur.position = jsonFrameData.jointdata[i].get_joint("rfemur");
    158.         rtibia.position = jsonFrameData.jointdata[i].get_joint("rtibia");
    159.         rfoot.position = jsonFrameData.jointdata[i].get_joint("rfoot");
    160.         rtoes.position = jsonFrameData.jointdata[i].get_joint("rtoes");
    161.         lowerback.position = jsonFrameData.jointdata[i].get_joint("lowerback");
    162.         upperback.position = jsonFrameData.jointdata[i].get_joint("upperback");
    163.         thorax.position = jsonFrameData.jointdata[i].get_joint("thorax");
    164.         lowerneck.position = jsonFrameData.jointdata[i].get_joint("lowerneck");
    165.         upperneck.position = jsonFrameData.jointdata[i].get_joint("upperneck");
    166.         head.position = jsonFrameData.jointdata[i].get_joint("head");
    167.         lclavicle.position = jsonFrameData.jointdata[i].get_joint("lclavicle");
    168.         lhumerus.position = jsonFrameData.jointdata[i].get_joint("lhumerus");
    169.         lradius.position = jsonFrameData.jointdata[i].get_joint("lradius");
    170.         lwrist.position = jsonFrameData.jointdata[i].get_joint("lwrist");
    171.         lhand.position = jsonFrameData.jointdata[i].get_joint("lhand");
    172.         lfingers.position = jsonFrameData.jointdata[i].get_joint("lfingers");
    173.         lthumb.position = jsonFrameData.jointdata[i].get_joint("lthumb");
    174.         rclavicle.position = jsonFrameData.jointdata[i].get_joint("rclavicle");
    175.         rhumerus.position = jsonFrameData.jointdata[i].get_joint("rhumerus");
    176.         rradius.position = jsonFrameData.jointdata[i].get_joint("rradius");
    177.         rwrist.position = jsonFrameData.jointdata[i].get_joint("rwrist");
    178.         rhand.position = jsonFrameData.jointdata[i].get_joint("rhand");
    179.         rfingers.position = jsonFrameData.jointdata[i].get_joint("rfingers");
    180.         rthumb.position = jsonFrameData.jointdata[i].get_joint("rthumb");
    181.     }
    182.  
    183.  
    184. }
     
  2. Kurt-Dekker

    Kurt-Dekker

    Joined:
    Mar 16, 2013
    Posts:
    38,745
    You shouldn't be doing anything but physics in FixedUpdate().

    You certainly should not be hitting a web request there.

    Hit the web request in a coroutine (could even be a loop) and then process the data in Update()

    ONLY once you have the data ready, then if it is actually physics-system related, THEN do the work in FixedUpdate()