private void Start() { //avatarMain = this.gameObject.GetComponent(typeof(AvatarMain)) as AvatarMain; if (avatarModel == null) { avatarModel = this.gameObject.GetComponent(typeof(PoseModelHelper)) as PoseModelHelper; } }
// 取得單一姿勢正確率 float getAccuracy(PoseModelHelper poseModelHelper, List <HumanBodyBones> comparingParts) { int i, index, len = comparingParts.Count; Transform p1, p2, s1, s2; Vector3 playerBone, standardBone; float diff = 0f, total_diff = 0f; for (i = 0; i < len; i++) { index = PoseModelHelper.bone2IndexMap[comparingParts[i]]; if ((p1 = model_helper.GetBoneTransform(index)) == null) { continue; } if ((s1 = poseModelHelper.GetBoneTransform(index)) == null) { continue; } if ((i + 1) >= len) { index = PoseModelHelper.bone2IndexMap[comparingParts[0]]; } else { index = PoseModelHelper.bone2IndexMap[comparingParts[i + 1]]; } if ((p2 = model_helper.GetBoneTransform(index)) == null) { continue; } if ((s2 = poseModelHelper.GetBoneTransform(index)) == null) { continue; } //取得玩家與標準模型 目前節點(jointType)的向量 playerBone = (p2.position - p1.position).normalized; standardBone = (s2.position - s1.position).normalized; //計算玩家骨架 與 姿勢骨架角度差距 diff = Vector3.Angle(playerBone, standardBone); if (diff > 90f) { diff = 90f; } total_diff += diff / 90f; } total_diff /= len; return(1f - total_diff); }