public void RandomizePhysicalData(ref AnimalData animalData)
 {
     for (int i = 0; i < _similarBodyPartsIndexes.Count; i++)
     {
         float mass   = Random.Range(AnimalData.massMin, AnimalData.massMax);
         float xScale = Random.Range(AnimalData.multiplierRangeMin, AnimalData.multiplierRangeMax);
         float zScale = Random.Range(AnimalData.multiplierRangeMin, AnimalData.multiplierRangeMax);
         System.Numerics.Vector3 maximumVelocity = System.Numerics.Vector3.Zero;
         foreach (AnimalBodyPart bodyPart in _similarBodyPartsDictionary[i])
         {
             bodyPart.SetMass(mass);
             if (bodyPart.ifScalable)
             {
                 bodyPart.SetScale(new System.Numerics.Vector3(xScale, 1, zScale));
             }
             if (bodyPart.isMoveable)
             {
                 if (maximumVelocity.Equals(System.Numerics.Vector3.Zero))
                 {
                     for (int j = 0; j < bodyPart.jointHandlers.Length; j++)
                     {
                         if ((int)bodyPart.jointHandlers[j].jointAxis == 0)
                         {
                             maximumVelocity.X = Random.Range(AnimalData.velocityMin, AnimalData.velocityMax);
                         }
                         else if ((int)bodyPart.jointHandlers[j].jointAxis == 1)
                         {
                             maximumVelocity.Y = Random.Range(AnimalData.velocityMin, AnimalData.velocityMax);
                         }
                         else
                         {
                             maximumVelocity.Z = Random.Range(AnimalData.velocityMin, AnimalData.velocityMax);
                         }
                     }
                 }
                 bodyPart.SetMaximumVelocity(maximumVelocity);
             }
         }
         animalData.partsMass[i]            = mass;
         animalData.partsScaleMultiplier[i] = new System.Numerics.Vector3(xScale, 1, zScale);
         animalData.targetJointsVelocity[i] = maximumVelocity;
     }
 }