PUBG - Skeleton bone ESP

Начинающий
Статус
Оффлайн
Регистрация
9 Фев 2017
Сообщения
29
Реакции[?]
9
Поинты[?]
0
Даю общий доступ к моему коду для написания ESP.

Для справки, соответствующие идентификаторы костей соответствуют этим местам;

В сущности вы будете должны прочитать ComponentToWorld что FTransform внутри USkeletalMeshComponent.
Он не определен в SDK, поэтому вам придется найти его вручную.

ComponentToWorld = AActor + 0x400] + 0x190
Код:
actor.ComponentToWorld = ReadFTransform(mesh+ 0x190);
Код:
public class FTransform
    {
        public Vector4 Rotation;
        public Vector3 Translation;
        public Vector3 Scale3D;
        public FTransform(Vector4 rot, Vector3 translation, Vector3 scale)
        {
            Rotation = rot;
            Translation = translation;
            Scale3D = scale;
        }
 
        public Matrix ToMatrixWithScale()
        {
            Matrix m = new Matrix();
 
            m.M41 = Translation.X;
            m.M42 = Translation.Y;
            m.M43 = Translation.Z;
 
            float x2 = Rotation.X + Rotation.X;
            float y2 = Rotation.Y + Rotation.Y;
            float z2 = Rotation.Z + Rotation.Z;
 
            float xx2 = Rotation.X * x2;
            float yy2 = Rotation.Y * y2;
            float zz2 = Rotation.Z * z2;
            m.M11 = (1.0f - (yy2 + zz2)) * Scale3D.X;
            m.M22 = (1.0f - (xx2 + zz2)) * Scale3D.Y;
            m.M33 = (1.0f - (xx2 + yy2)) * Scale3D.Z;
 
 
            float yz2 = Rotation.Y * z2;
            float wx2 = Rotation.W * x2;
            m.M32 = (yz2 - wx2) * Scale3D.Z;
            m.M23 = (yz2 + wx2) * Scale3D.Y;
 
 
            float xy2 = Rotation.X * y2;
            float wz2 = Rotation.W * z2;
            m.M21 = (xy2 - wz2) * Scale3D.Y;
            m.M12 = (xy2 + wz2) * Scale3D.X;
 
 
            float xz2 = Rotation.X * z2;
            float wy2 = Rotation.W * y2;
            m.M31 = (xz2 + wy2) * Scale3D.Z;
            m.M13 = (xz2 - wy2) * Scale3D.X;
 
            m.M14 = 0.0f;
            m.M24 = 0.0f;
            m.M34 = 0.0f;
            m.M44 = 1.0f;
 
            return m;
        }
    }
Код:
 public FTransform ReadFTransform(long ptr)
        {
            //i know this is shitty. I still dont care.
            float quatX = ReadFloat(ptr + 0x00);
            float quatY = ReadFloat(ptr + 0x04);
            float quatZ = ReadFloat(ptr + 0x08);
            float quatW = ReadFloat(ptr + 0x0C);
 
            float transX = ReadFloat(ptr + 0x0010);
            float transY = ReadFloat(ptr + 0x0014);
            float transZ = ReadFloat(ptr + 0x0018);
 
            float scaleX = ReadFloat(ptr + 0x0020);
            float scaleY = ReadFloat(ptr + 0x0024);
            float scaleZ = ReadFloat(ptr + 0x0028);
 
            Vector4 fQuat = new Vector4(quatW, quatX, quatY, quatZ);
            Vector3 trans = new Vector3(transX, transY, transZ);
            Vector3 scale = new Vector3(scaleX, scaleY, scaleZ);
            FTransform fTransform = new FTransform(fQuat, trans, scale);
            return fTransform;
        }
Вот мой внешний метод GetBoneIndex.
Это будет читать отдельные вектора костей из массива, который содержит все кости.
Массив называется "Cachedbone Space Transforms", но SDK не имеет никаких ссылок на него, поэтому вам придется найти это вручную, если он изменился.
Код:
        public FTransform GetBoneIndex(long actorPtr, int boneIndex)
        {
            long mesh = ReadInt64(actorPtr + 0x400); //USkeletalMeshComponent
            long arrayBones = ReadInt64(mesh + 0x0790); //CachedBoneSpaceTransforms
            var transform = ReadFTransform(arrayBones + (boneIndex * 0x30));
            return transform;
        }
Это получает местоположение каждой из костей.
Код:
        public Vector3 GetBoneWithRotation(int id, ArrayActorInfo actor)
        {
            var bone = GetBoneIndex(actor.BasePointer , id); //get the bone vector without any rotation applied
 
            var boneMatrix = bone.ToMatrixWithScale();
            var componentToWorldMatrix = actor.ComponentToWorld.ToMatrixWithScale(); //bone translations are applied to ComponentToWorld matrix
            var newMatrix = boneMatrix * componentToWorldMatrix;
 
            return new Vector3(newMatrix.M41, newMatrix.M42, newMatrix.M43);
        }
Последние идентификаторы костей:
Код:
    enum Bone : int
    {
        Root = 0,
        pelvis = 1,
        spine_01 = 2,
        spine_02 = 3,
        spine_03 = 4,
        neck_01 = 5,
        Head = 6,
        face_root = 7,
        eyebrows_pos_root = 8,
        eyebrows_root = 9,
        eyebrows_r = 10,
        eyebrows_l = 11,
        eyebrow_l = 12,
        eyebrow_r = 13,
        forehead_root = 14,
        forehead = 15,
        jaw_pos_root = 16,
        jaw_root = 17,
        jaw = 18,
        mouth_down_pos_root = 19,
        mouth_down_root = 20,
        lip_bm_01 = 21,
        lip_bm_02 = 22,
        lip_br = 23,
        lip_bl = 24,
        jaw_01 = 25,
        jaw_02 = 26,
        cheek_pos_root = 27,
        cheek_root = 28,
        cheek_r = 29,
        cheek_l = 30,
        nose_side_root = 31,
        nose_side_r_01 = 32,
        nose_side_r_02 = 33,
        nose_side_l_01 = 34,
        nose_side_l_02 = 35,
        eye_pos_r_root = 36,
        eye_r_root = 37,
        eye_rot_r_root = 38,
        eye_lid_u_r = 39,
        eye_r = 40,
        eye_lid_b_r = 41,
        eye_pos_l_root = 42,
        eye_l_root = 43,
        eye_rot_l_root = 44,
        eye_lid_u_l = 45,
        eye_l = 46,
        eye_lid_b_l = 47,
        nose_pos_root = 48,
        nose = 49,
        mouth_up_pos_root = 50,
        mouth_up_root = 51,
        lip_ul = 52,
        lip_um_01 = 53,
        lip_um_02 = 54,
        lip_ur = 55,
        lip_l = 56,
        lip_r = 57,
        hair_root = 58,
        hair_b_01 = 59,
        hair_b_02 = 60,
        hair_l_01 = 61,
        hair_l_02 = 62,
        hair_r_01 = 63,
        hair_r_02 = 64,
        hair_f_02 = 65,
        hair_f_01 = 66,
        hair_b_pt_01 = 67,
        hair_b_pt_02 = 68,
        hair_b_pt_03 = 69,
        hair_b_pt_04 = 70,
        hair_b_pt_05 = 71,
        camera_fpp = 72,
        GunReferencePoint = 73,
        GunRef = 74,
        breast_l = 75,
        breast_r = 76,
        clavicle_l = 77,
        upperarm_l = 78,
        lowerarm_l = 79,
        hand_l = 80,
        thumb_01_l = 81,
        thumb_02_l = 82,
        thumb_03_l = 83,
        thumb_04_l_MBONLY = 84,
        index_01_l = 85,
        index_02_l = 86,
        index_03_l = 87,
        index_04_l_MBONLY = 88,
        middle_01_l = 89,
        middle_02_l = 90,
        middle_03_l = 91,
        middle_04_l_MBONLY = 92,
        ring_01_l = 93,
        ring_02_l = 94,
        ring_03_l = 95,
        ring_04_l_MBONLY = 96,
        pinky_01_l = 97,
        pinky_02_l = 98,
        pinky_03_l = 99,
        pinky_04_l_MBONLY = 100,
        item_l = 101,
        lowerarm_twist_01_l = 102,
        upperarm_twist_01_l = 103,
        clavicle_r = 104,
        upperarm_r = 105,
        lowerarm_r = 106,
        hand_r = 107,
        thumb_01_r = 108,
        thumb_02_r = 109,
        thumb_03_r = 110,
        thumb_04_r_MBONLY = 111,
        index_01_r = 112,
        index_02_r = 113,
        index_03_r = 114,
        index_04_r_MBONLY = 115,
        middle_01_r = 116,
        middle_02_r = 117,
        middle_03_r = 118,
        middle_04_r_MBONLY = 119,
        ring_01_r = 120,
        ring_02_r = 121,
        ring_03_r = 122,
        ring_04_r_MBONLY = 123,
        pinky_01_r = 124,
        pinky_02_r = 125,
        pinky_03_r = 126,
        pinky_04_r_MBONLY = 127,
        item_r = 128,
        lowerarm_twist_01_r = 129,
        upperarm_twist_01_r = 130,
        BackPack = 131,
        backpack_01 = 132,
        backpack_02 = 133,
        Slot_Primary = 134,
        Slot_Secondary = 135,
        Slot_Melee = 136,
        slot_throwable = 137,
        coat_l_01 = 138,
        coat_l_02 = 139,
        coat_l_03 = 140,
        coat_l_04 = 141,
        coat_fl_01 = 142,
        coat_fl_02 = 143,
        coat_fl_03 = 144,
        coat_fl_04 = 145,
        coat_b_01 = 146,
        coat_b_02 = 147,
        coat_b_03 = 148,
        coat_b_04 = 149,
        coat_r_01 = 150,
        coat_r_02 = 151,
        coat_r_03 = 152,
        coat_r_04 = 153,
        coat_fr_01 = 154,
        coat_fr_02 = 155,
        coat_fr_03 = 156,
        coat_fr_04 = 157,
        thigh_l = 158,
        calf_l = 159,
        foot_l = 160,
        ball_l = 161,
        calf_twist_01_l = 162,
        thigh_twist_01_l = 163,
        thigh_r = 164,
        calf_r = 165,
        foot_r = 166,
        ball_r = 167,
        calf_twist_01_r = 168,
        thigh_twist_01_r = 169,
        Slot_SideArm = 170,
        skirt_l_01 = 171,
        skirt_l_02 = 172,
        skirt_l_03 = 173,
        skirt_f_01 = 174,
        skirt_f_02 = 175,
        skirt_f_03 = 176,
        skirt_b_01 = 177,
        skirt_b_02 = 178,
        skirt_b_03 = 179,
        skirt_r_01 = 180,
        skirt_r_02 = 181,
        skirt_r_03 = 182,
        ik_hand_root = 183,
        ik_hand_gun = 184,
        ik_hand_r = 185,
        ik_hand_l = 186,
        ik_aim_root = 187,
        ik_aim_l = 188,
        ik_aim_r = 189,
        ik_foot_root = 190,
        ik_foot_l = 191,
        ik_foot_r = 192,
        camera_tpp = 193,
        ik_target_root = 194,
        ik_target_l = 195,
        ik_target_r = 196,
        VB_spine_03_spine_03 = 197,
        VB_upperarm_r_lowerarm_r = 198
    }
Объедините их в скелет. (каждый массив является частью, которая должна быть нарисована индивидуально)
Код:
   static Bone[ ] skeletonUpper = new Bone[ ] {
            Bone.forehead, Bone.Head, Bone.neck_01,
        };
        static Bone[ ] skeletonRightArm = new Bone[ ] {
            Bone.neck_01, Bone.upperarm_r, Bone.lowerarm_r, Bone.hand_r
        };
        static Bone[ ] skeletonLeftArm = new Bone[ ] {
            Bone.neck_01, Bone.upperarm_l, Bone.lowerarm_l, Bone.hand_l
        };
        static Bone[ ] skeletonSpine = new Bone[ ] {
            Bone.neck_01, Bone.spine_01, Bone.spine_02, Bone.pelvis
        };
        static Bone[ ] skeletonLowerRight = new Bone[ ] {
            Bone.pelvis, Bone.thigh_r, Bone.calf_r, Bone.foot_r
        };
        static Bone[ ] skeletonLowerLeft = new Bone[ ] {
            Bone.pelvis, Bone.thigh_l, Bone.calf_l, Bone.foot_l
        };
        static Bone[ ][ ] skeleton = new Bone[ ][ ] {
            skeletonUpper, skeletonLeftArm, skeletonRightArm, skeletonSpine, skeletonLowerRight, skeletonLowerLeft
        };
И, наконец, провести линии между каждой костью..
Код:
foreach (Bone[ ] part in skeleton)
{
    Vector3 previousBone = new Vector3();
    foreach (Bone b in part)
    {
        var currentBone = GetBoneWithRotation((int)b, actor);
 
        if (previousBone.X == 0) //first bone no draw happens
        {
            previousBone = currentBone;
            continue;
        }
        else
        {
            //draw line from previousBone to currentBone W2S
            DrawLine3D(previousBone, currentBone);
            previousBone = currentBone;
        }
    }
}
У вас будет что-то вроде этого
 
Новичок
Статус
Оффлайн
Регистрация
21 Май 2019
Сообщения
1
Реакции[?]
0
Поинты[?]
0
[QUOTE = "Kano, publicación: 397286, miembro: 12636"]
Comparto mi código para escribir ESP.

Для справки, соответствующие идентификаторы костей соответствуют этим местам;

В сущности вы будете должны прочитать ComponentToWorld что FTransform внутри USkeletalMeshComponent.
Он не определен в SDK, поэтому вам придется найти его вручную.

ComponentToWorld = AActor + 0x400] + 0x190
Код:
actor.ComponentToWorld = ReadFTransform(mesh+ 0x190);
Код:
public class FTransform
    {
        public Vector4 Rotation;
        public Vector3 Translation;
        public Vector3 Scale3D;
        public FTransform(Vector4 rot, Vector3 translation, Vector3 scale)
        {
            Rotation = rot;
            Translation = translation;
            Scale3D = scale;
        }

        public Matrix ToMatrixWithScale()
        {
            Matrix m = new Matrix();

            m.M41 = Translation.X;
            m.M42 = Translation.Y;
            m.M43 = Translation.Z;

            float x2 = Rotation.X + Rotation.X;
            float y2 = Rotation.Y + Rotation.Y;
            float z2 = Rotation.Z + Rotation.Z;

            float xx2 = Rotation.X * x2;
            float yy2 = Rotation.Y * y2;
            float zz2 = Rotation.Z * z2;
            m.M11 = (1.0f - (yy2 + zz2)) * Scale3D.X;
            m.M22 = (1.0f - (xx2 + zz2)) * Scale3D.Y;
            m.M33 = (1.0f - (xx2 + yy2)) * Scale3D.Z;


            float yz2 = Rotation.Y * z2;
            float wx2 = Rotation.W * x2;
            m.M32 = (yz2 - wx2) * Scale3D.Z;
            m.M23 = (yz2 + wx2) * Scale3D.Y;


            float xy2 = Rotation.X * y2;
            float wz2 = Rotation.W * z2;
            m.M21 = (xy2 - wz2) * Scale3D.Y;
            m.M12 = (xy2 + wz2) * Scale3D.X;


            float xz2 = Rotation.X * z2;
            float wy2 = Rotation.W * y2;
            m.M31 = (xz2 + wy2) * Scale3D.Z;
            m.M13 = (xz2 - wy2) * Scale3D.X;

            m.M14 = 0.0f;
            m.M24 = 0.0f;
            m.M34 = 0.0f;
            m.M44 = 1.0f;

            return m;
        }
    }
Код:
 public FTransform ReadFTransform(long ptr)
        {
            //i know this is shitty. I still dont care.
            float quatX = ReadFloat(ptr + 0x00);
            float quatY = ReadFloat(ptr + 0x04);
            float quatZ = ReadFloat(ptr + 0x08);
            float quatW = ReadFloat(ptr + 0x0C);

            float transX = ReadFloat(ptr + 0x0010);
            float transY = ReadFloat(ptr + 0x0014);
            float transZ = ReadFloat(ptr + 0x0018);

            float scaleX = ReadFloat(ptr + 0x0020);
            float scaleY = ReadFloat(ptr + 0x0024);
            float scaleZ = ReadFloat(ptr + 0x0028);

            Vector4 fQuat = new Vector4(quatW, quatX, quatY, quatZ);
            Vector3 trans = new Vector3(transX, transY, transZ);
            Vector3 scale = new Vector3(scaleX, scaleY, scaleZ);
            FTransform fTransform = new FTransform(fQuat, trans, scale);
            return fTransform;
        }
Вот мой внешний метод GetBoneIndex.
Это будет читать отдельные вектора костей из массива, который содержит все кости.
Массив называется "Cachedbone Space Transforms", но SDK не имеет никаких ссылок на него, поэтому вам придется найти это вручную, если он изменился.
Код:
        public FTransform GetBoneIndex(long actorPtr, int boneIndex)
        {
            long mesh = ReadInt64(actorPtr + 0x400); //USkeletalMeshComponent
            long arrayBones = ReadInt64(mesh + 0x0790); //CachedBoneSpaceTransforms
            var transform = ReadFTransform(arrayBones + (boneIndex * 0x30));
            return transform;
        }
Это получает местоположение каждой из костей.
Код:
        public Vector3 GetBoneWithRotation(int id, ArrayActorInfo actor)
        {
            var bone = GetBoneIndex(actor.BasePointer , id); //get the bone vector without any rotation applied

            var boneMatrix = bone.ToMatrixWithScale();
            var componentToWorldMatrix = actor.ComponentToWorld.ToMatrixWithScale(); //bone translations are applied to ComponentToWorld matrix
            var newMatrix = boneMatrix * componentToWorldMatrix;

            return new Vector3(newMatrix.M41, newMatrix.M42, newMatrix.M43);
        }
Последние идентификаторы костей:
Код:
    enum Bone : int
    {
        Root = 0,
        pelvis = 1,
        spine_01 = 2,
        spine_02 = 3,
        spine_03 = 4,
        neck_01 = 5,
        Head = 6,
        face_root = 7,
        eyebrows_pos_root = 8,
        eyebrows_root = 9,
        eyebrows_r = 10,
        eyebrows_l = 11,
        eyebrow_l = 12,
        eyebrow_r = 13,
        forehead_root = 14,
        forehead = 15,
        jaw_pos_root = 16,
        jaw_root = 17,
        jaw = 18,
        mouth_down_pos_root = 19,
        mouth_down_root = 20,
        lip_bm_01 = 21,
        lip_bm_02 = 22,
        lip_br = 23,
        lip_bl = 24,
        jaw_01 = 25,
        jaw_02 = 26,
        cheek_pos_root = 27,
        cheek_root = 28,
        cheek_r = 29,
        cheek_l = 30,
        nose_side_root = 31,
        nose_side_r_01 = 32,
        nose_side_r_02 = 33,
        nose_side_l_01 = 34,
        nose_side_l_02 = 35,
        eye_pos_r_root = 36,
        eye_r_root = 37,
        eye_rot_r_root = 38,
        eye_lid_u_r = 39,
        eye_r = 40,
        eye_lid_b_r = 41,
        eye_pos_l_root = 42,
        eye_l_root = 43,
        eye_rot_l_root = 44,
        eye_lid_u_l = 45,
        eye_l = 46,
        eye_lid_b_l = 47,
        nose_pos_root = 48,
        nose = 49,
        mouth_up_pos_root = 50,
        mouth_up_root = 51,
        lip_ul = 52,
        lip_um_01 = 53,
        lip_um_02 = 54,
        lip_ur = 55,
        lip_l = 56,
        lip_r = 57,
        hair_root = 58,
        hair_b_01 = 59,
        hair_b_02 = 60,
        hair_l_01 = 61,
        hair_l_02 = 62,
        hair_r_01 = 63,
        hair_r_02 = 64,
        hair_f_02 = 65,
        hair_f_01 = 66,
        hair_b_pt_01 = 67,
        hair_b_pt_02 = 68,
        hair_b_pt_03 = 69,
        hair_b_pt_04 = 70,
        hair_b_pt_05 = 71,
        camera_fpp = 72,
        GunReferencePoint = 73,
        GunRef = 74,
        breast_l = 75,
        breast_r = 76,
        clavicle_l = 77,
        upperarm_l = 78,
        lowerarm_l = 79,
        hand_l = 80,
        thumb_01_l = 81,
        thumb_02_l = 82,
        thumb_03_l = 83,
        thumb_04_l_MBONLY = 84,
        index_01_l = 85,
        index_02_l = 86,
        index_03_l = 87,
        index_04_l_MBONLY = 88,
        middle_01_l = 89,
        middle_02_l = 90,
        middle_03_l = 91,
        middle_04_l_MBONLY = 92,
        ring_01_l = 93,
        ring_02_l = 94,
        ring_03_l = 95,
        ring_04_l_MBONLY = 96,
        pinky_01_l = 97,
        pinky_02_l = 98,
        pinky_03_l = 99,
        pinky_04_l_MBONLY = 100,
        item_l = 101,
        lowerarm_twist_01_l = 102,
        upperarm_twist_01_l = 103,
        clavicle_r = 104,
        upperarm_r = 105,
        lowerarm_r = 106,
        hand_r = 107,
        thumb_01_r = 108,
        thumb_02_r = 109,
        thumb_03_r = 110,
        thumb_04_r_MBONLY = 111,
        index_01_r = 112,
        index_02_r = 113,
        index_03_r = 114,
        index_04_r_MBONLY = 115,
        middle_01_r = 116,
        middle_02_r = 117,
        middle_03_r = 118,
        middle_04_r_MBONLY = 119,
        ring_01_r = 120,
        ring_02_r = 121,
        ring_03_r = 122,
        ring_04_r_MBONLY = 123,
        pinky_01_r = 124,
        pinky_02_r = 125,
        pinky_03_r = 126,
        pinky_04_r_MBONLY = 127,
        item_r = 128,
        lowerarm_twist_01_r = 129,
        upperarm_twist_01_r = 130,
        BackPack = 131,
        backpack_01 = 132,
        backpack_02 = 133,
        Slot_Primary = 134,
        Slot_Secondary = 135,
        Slot_Melee = 136,
        slot_throwable = 137,
        coat_l_01 = 138,
        coat_l_02 = 139,
        coat_l_03 = 140,
        coat_l_04 = 141,
        coat_fl_01 = 142,
        coat_fl_02 = 143,
        coat_fl_03 = 144,
        coat_fl_04 = 145,
        coat_b_01 = 146,
        coat_b_02 = 147,
        coat_b_03 = 148,
        coat_b_04 = 149,
        coat_r_01 = 150,
        coat_r_02 = 151,
        coat_r_03 = 152,
        coat_r_04 = 153,
        coat_fr_01 = 154,
        coat_fr_02 = 155,
        coat_fr_03 = 156,
        coat_fr_04 = 157,
        thigh_l = 158,
        calf_l = 159,
        foot_l = 160,
        ball_l = 161,
        calf_twist_01_l = 162,
        thigh_twist_01_l = 163,
        thigh_r = 164,
        calf_r = 165,
        foot_r = 166,
        ball_r = 167,
        calf_twist_01_r = 168,
        thigh_twist_01_r = 169,
        Slot_SideArm = 170,
        skirt_l_01 = 171,
        skirt_l_02 = 172,
        skirt_l_03 = 173,
        skirt_f_01 = 174,
        skirt_f_02 = 175,
        skirt_f_03 = 176,
        skirt_b_01 = 177,
        skirt_b_02 = 178,
        skirt_b_03 = 179,
        skirt_r_01 = 180,
        skirt_r_02 = 181,
        skirt_r_03 = 182,
        ik_hand_root = 183,
        ik_hand_gun = 184,
        ik_hand_r = 185,
        ik_hand_l = 186,
        ik_aim_root = 187,
        ik_aim_l = 188,
        ik_aim_r = 189,
        ik_foot_root = 190,
        ik_foot_l = 191,
        ik_foot_r = 192,
        camera_tpp = 193,
        ik_target_root = 194,
        ik_target_l = 195,
        ik_target_r = 196,
        VB_spine_03_spine_03 = 197,
        VB_upperarm_r_lowerarm_r = 198
    }
Объедините их в скелет. (каждый массив является частью, которая должна быть нарисована индивидуально)
Код:
   static Bone[ ] skeletonUpper = new Bone[ ] {
            Bone.forehead, Bone.Head, Bone.neck_01,
        };
        static Bone[ ] skeletonRightArm = new Bone[ ] {
            Bone.neck_01, Bone.upperarm_r, Bone.lowerarm_r, Bone.hand_r
        };
        static Bone[ ] skeletonLeftArm = new Bone[ ] {
            Bone.neck_01, Bone.upperarm_l, Bone.lowerarm_l, Bone.hand_l
        };
        static Bone[ ] skeletonSpine = new Bone[ ] {
            Bone.neck_01, Bone.spine_01, Bone.spine_02, Bone.pelvis
        };
        static Bone[ ] skeletonLowerRight = new Bone[ ] {
            Bone.pelvis, Bone.thigh_r, Bone.calf_r, Bone.foot_r
        };
        static Bone[ ] skeletonLowerLeft = new Bone[ ] {
            Bone.pelvis, Bone.thigh_l, Bone.calf_l, Bone.foot_l
        };
        static Bone[ ][ ] skeleton = new Bone[ ][ ] {
            skeletonUpper, skeletonLeftArm, skeletonRightArm, skeletonSpine, skeletonLowerRight, skeletonLowerLeft
        };
И, наконец, провести линии между каждой костью..
[CÓDIGO] foreach (parte del hueso [] en el esqueleto)
{
Vector3 previousBone = nuevo Vector3 ();
foreach (hueso b en parte)
{
var currentBone = GetBoneWithRotation ((int) b, actor);

if (previousBone.X == 0) // primer hueso no ocurre empate
{
previousBone = currentBone;
Seguir;
}
más
{
// dibuja una línea desde previousBone a currentBone W2S
DrawLine3D (previousBone, currentBone);
previousBone = currentBone;
}
}
}[/CÓDIGO]
Tendrás algo como esto

[/CITAR]
ty
 
Сверху Снизу