C++RAW #include "UnityPrefix.h" #include "Runtime/Mono/MonoBehaviour.h" #include "Runtime/Mono/MonoScript.h" #include "Runtime/Graphics/Transform.h" #include "Runtime/Animation/Avatar.h" #include "Runtime/mecanim/human/human.h" using namespace Unity; CSRAW using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Collections; namespace UnityEngine { ENUM internal BodyDoF SpineFrontBack = 0, SpineLeftRight, SpineRollLeftRight, ChestFrontBack, ChestLeftRight, ChestRollLeftRight, LastBodyDoF END ENUM internal HeadDoF NeckFrontBack = 0, NeckLeftRight, NeckRollLeftRight, HeadFrontBack, HeadLeftRight, HeadRollLeftRight, LeftEyeDownUp, LeftEyeInOut, RightEyeDownUp, RightEyeInOut, JawDownUp, JawLeftRight, LastHeadDoF END ENUM internal LegDoF UpperLegFrontBack = 0, UpperLegInOut, UpperLegRollInOut, LegCloseOpen, LegRollInOut, FootCloseOpen, FootInOut, ToesUpDown, LastLegDoF END ENUM internal ArmDoF ShoulderDownUp = 0, ShoulderFrontBack, ArmDownUp, ArmFrontBack, ArmRollInOut, ForeArmCloseOpen, ForeArmRollInOut, HandDownUp, HandInOut, LastArmDoF END ENUM internal FingerDoF ProximalDownUp = 0, ProximalInOut, IntermediateCloseOpen, DistalCloseOpen, LastFingerDoF END ENUM internal DoF BodyDoFStart = 0, HeadDoFStart = (int)BodyDoFStart + (int)BodyDoF.LastBodyDoF, LeftLegDoFStart = (int)HeadDoFStart + (int)HeadDoF.LastHeadDoF, RightLegDoFStart = (int)LeftLegDoFStart + (int)LegDoF.LastLegDoF, LeftArmDoFStart = (int)RightLegDoFStart + (int)LegDoF.LastLegDoF, RightArmDoFStart = (int)LeftArmDoFStart + (int)ArmDoF.LastArmDoF, LeftThumbDoFStart = (int)RightArmDoFStart + (int)ArmDoF.LastArmDoF, LeftIndexDoFStart = (int)LeftThumbDoFStart + (int)FingerDoF.LastFingerDoF, LeftMiddleDoFStart = (int)LeftIndexDoFStart + (int)FingerDoF.LastFingerDoF, LeftRingDoFStart = (int)LeftMiddleDoFStart + (int)FingerDoF.LastFingerDoF, LeftLittleDoFStart = (int)LeftRingDoFStart + (int)FingerDoF.LastFingerDoF, RightThumbDoFStart = (int)LeftLittleDoFStart + (int)FingerDoF.LastFingerDoF, RightIndexDoFStart = (int)RightThumbDoFStart + (int)FingerDoF.LastFingerDoF, RightMiddleDoFStart = (int)RightIndexDoFStart + (int)FingerDoF.LastFingerDoF, RightRingDoFStart = (int)RightMiddleDoFStart + (int)FingerDoF.LastFingerDoF, RightLittleDoFStart = (int)RightRingDoFStart + (int)FingerDoF.LastFingerDoF, LastDoF = (int)RightLittleDoFStart + (int)FingerDoF.LastFingerDoF END // Human Body Bones ENUM HumanBodyBones // This is the Hips bone Hips = 0, // This is the Left Upper Leg bone LeftUpperLeg = 1, // This is the Right Upper Leg bone RightUpperLeg = 2, // This is the Left Knee bone LeftLowerLeg = 3, // This is the Right Knee bone RightLowerLeg = 4, // This is the Left Ankle bone LeftFoot = 5, // This is the Right Ankle bone RightFoot = 6, // This is the first Spine bone Spine = 7, // This is the Chest bone Chest = 8, // This is the Neck bone Neck = 9, // This is the Head bone Head = 10, // This is the Left Shoulder bone LeftShoulder = 11, // This is the Right Shoulder bone RightShoulder = 12, // This is the Left Upper Arm bone LeftUpperArm = 13, // This is the Right Upper Arm bone RightUpperArm = 14, // This is the Left Elbow bone LeftLowerArm = 15, // This is the Right Elbow bone RightLowerArm = 16, // This is the Left Wrist bone LeftHand = 17, // This is the Right Wrist bone RightHand = 18, // This is the Left Toes bone LeftToes = 19, // This is the Right Toes bone RightToes = 20, // This is the Left Eye bone LeftEye = 21, // This is the Right Eye bone RightEye = 22, // This is the Jaw bone Jaw = 23, // This is the Last bone index delimiter LastBone = 24 END ENUM internal HumanFingerBones ThumbProximal = 0, ThumbIntermediate, ThumbDistal, IndexProximal, IndexIntermediate, IndexDistal, MiddleProximal, MiddleIntermediate, MiddleDistal, RingProximal, RingIntermediate, RingDistal, LittleProximal, LittleIntermediate, LittleDistal, LastBone END ENUM internal HumanBodyPart BodyStart = 0, LeftFingerStart = (int)BodyStart + (int)HumanBodyBones.LastBone, RightFingerStart = (int)LeftFingerStart + (int)HumanFingerBones.LastBone END ENUM internal HumanParameter UpperArmTwist = 0, LowerArmTwist, UpperLegTwist, LowerLegTwist, ArmStretch, LegStretch, FeetSpacing END // Avatar definition CLASS Avatar : Object // Return true if this avatar is a valid mecanim avatar. It can be a generic avatar or a human avatar. CUSTOM_PROP bool isValid { return self->IsValid(); } // Return true if this avatar is a valid human avatar. CUSTOM_PROP bool isHuman { return self->IsValid() && self->GetAsset()->isHuman(); } CUSTOM internal void SetMuscleMinMax(int muscleId, float min, float max) { self->SetMuscleMinMax(muscleId, min, max); } CUSTOM internal void SetParameter(int parameterId, float value) { self->SetParameter(parameterId, value); } CUSTOM internal float GetAxisLength(int humanId) { return self->GetAxisLength(humanId); } CUSTOM internal Quaternion GetPreRotation(int humanId) { return self->GetPreRotation(humanId); } CUSTOM internal Quaternion GetPostRotation(int humanId) { return self->GetPostRotation(humanId); } CUSTOM internal Quaternion GetZYPostQ(int humanId, Quaternion parentQ, Quaternion q) { return self->GetZYPostQ(humanId, parentQ, q); } CUSTOM internal Quaternion GetZYRoll(int humanId, Vector3 uvw) { return self->GetZYRoll(humanId, uvw); } CUSTOM internal Vector3 GetLimitSign(int humanId){ return self->GetLimitSign(humanId); } END // Humanoid definition CLASS HumanTrait : Object // Number of muscles CUSTOM_PROP static int MuscleCount { return HumanTrait::MuscleCount; } // Muscle's name CUSTOM_PROP static string[] MuscleName { return Scripting::StringVectorToMono( HumanTrait::GetMuscleName() ); } // Number of bones CUSTOM_PROP static int BoneCount { return HumanTrait::BoneCount; } // Bone's name CUSTOM_PROP static string[] BoneName { return Scripting::StringVectorToMono( HumanTrait::GetBoneName() ); } // Return muscle index linked to bone i, dofIndex allow you to choose between X, Y and Z muscle's axis CUSTOM static int MuscleFromBone(int i, int dofIndex){ return HumanTrait::MuscleFromBone(i, dofIndex); } // Return bone index linked to muscle i CUSTOM static int BoneFromMuscle(int i){ return HumanTrait::BoneFromMuscle(i); } // Return true if bone i is a required bone. CUSTOM static bool RequiredBone(int i){ return HumanTrait::RequiredBone(i); } // Number of required bones. CUSTOM_PROP static int RequiredBoneCount { return HumanTrait::RequiredBoneCount(); } CUSTOM internal static bool HasCollider(Avatar avatar, int i){ return HumanTrait::HasCollider(*avatar, i); } // Return default minimum values for muscle. CUSTOM static float GetMuscleDefaultMin(int i){ return HumanTrait::GetMuscleDefaultMin(i); } // Return default maximum values for muscle. CUSTOM static float GetMuscleDefaultMax(int i){ return HumanTrait::GetMuscleDefaultMax(i); } END CSRAW }