Merge pull request 'feature-binding: 动作绑定完成' (#1) from feature-binding into master
Reviewed-on: https://rrricardo.top/git/MotionCapture/MotionCapture/pulls/1
This commit is contained in:
		| @@ -39,7 +39,7 @@ ModelImporter: | |||||||
|     animationDoRetargetingWarnings: 0 |     animationDoRetargetingWarnings: 0 | ||||||
|     importAnimatedCustomProperties: 0 |     importAnimatedCustomProperties: 0 | ||||||
|     importConstraints: 0 |     importConstraints: 0 | ||||||
|     animationCompression: 1 |     animationCompression: 3 | ||||||
|     animationRotationError: 0.5 |     animationRotationError: 0.5 | ||||||
|     animationPositionError: 0.5 |     animationPositionError: 0.5 | ||||||
|     animationScaleError: 0.5 |     animationScaleError: 0.5 | ||||||
| @@ -106,11 +106,11 @@ ModelImporter: | |||||||
|     globalScale: 1 |     globalScale: 1 | ||||||
|     rootMotionBoneName: mixamorig:Hips |     rootMotionBoneName: mixamorig:Hips | ||||||
|     hasTranslationDoF: 0 |     hasTranslationDoF: 0 | ||||||
|     hasExtraRoot: 0 |     hasExtraRoot: 1 | ||||||
|     skeletonHasParents: 1 |     skeletonHasParents: 1 | ||||||
|   lastHumanDescriptionAvatarSource: {instanceID: 0} |   lastHumanDescriptionAvatarSource: {instanceID: 0} | ||||||
|   autoGenerateAvatarMappingIfUnspecified: 1 |   autoGenerateAvatarMappingIfUnspecified: 1 | ||||||
|   animationType: 2 |   animationType: 3 | ||||||
|   humanoidOversampling: 1 |   humanoidOversampling: 1 | ||||||
|   avatarSetup: 1 |   avatarSetup: 1 | ||||||
|   addHumanoidExtraRootOnlyWhenUsingAvatar: 1 |   addHumanoidExtraRootOnlyWhenUsingAvatar: 1 | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								Assets/Behaviours.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Assets/Behaviours.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 83bce6e0ab5db38aaaae7ec73b738130 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
							
								
								
									
										186
									
								
								Assets/Behaviours/BallStickBehaviour.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										186
									
								
								Assets/Behaviours/BallStickBehaviour.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,186 @@ | |||||||
|  | using System.Collections.Generic; | ||||||
|  | using Models; | ||||||
|  | using UnityEngine; | ||||||
|  | using Utils.PoseTransformHandlers; | ||||||
|  | 
 | ||||||
|  | namespace Behaviours | ||||||
|  | { | ||||||
|  |     public class BallStickBehaviour : MonoBehaviour | ||||||
|  |     { | ||||||
|  |         private readonly GameObject[] _nodes = new GameObject[PoseLandmarkType.MaxValue]; | ||||||
|  |         private readonly List<Bond> _bonds = new List<Bond>(); | ||||||
|  |         private readonly PoseTransform[] _poseTransforms = new PoseTransform[PoseLandmarkType.MaxValue]; | ||||||
|  |         private readonly UdpListener _listener = new UdpListener(); | ||||||
|  |         private const float Scale = 0.2f; | ||||||
|  | 
 | ||||||
|  |         // Start is called before the first frame update | ||||||
|  |         private void Start() | ||||||
|  |         { | ||||||
|  |             PoseTransform.AverageLength = 3; | ||||||
|  | 
 | ||||||
|  |             CreateNodes(); | ||||||
|  |             CreateBonds(); | ||||||
|  | 
 | ||||||
|  |             _listener.AddHandler(OnReceive); | ||||||
|  |             _listener.Connect(5000); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // Update is called once per frame | ||||||
|  |         private void Update() | ||||||
|  |         { | ||||||
|  |             var mid = _poseTransforms[PoseLandmarkType.LeftHip] + _poseTransforms[PoseLandmarkType.RightHip]; | ||||||
|  |             mid = mid / 2; | ||||||
|  |              | ||||||
|  |             for (var i = 0; i < PoseLandmarkType.MaxValue; i++) | ||||||
|  |             { | ||||||
|  |                 _nodes[i].transform.position = (_poseTransforms[i].ResultPosition - mid) * -5f; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             foreach (var bond in _bonds) | ||||||
|  |             { | ||||||
|  |                 bond.UpdateBond(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnDisable() | ||||||
|  |         { | ||||||
|  |             _listener.DisConnect(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnReceive(List<PoseLandmark> landmarks) | ||||||
|  |         { | ||||||
|  |             foreach (var landmark in landmarks) | ||||||
|  |             { | ||||||
|  |                 PoseTransform.UpdatePosition(ref _poseTransforms[landmark.Type.Value], landmark); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void CreateNodes() | ||||||
|  |         { | ||||||
|  |             for (var i = 0; i < PoseLandmarkType.MaxValue; i++) | ||||||
|  |             { | ||||||
|  |                 var ball = GameObject.CreatePrimitive(PrimitiveType.Sphere); | ||||||
|  | 
 | ||||||
|  |                 ball.transform.localScale = new Vector3(Scale, Scale, Scale); | ||||||
|  | 
 | ||||||
|  |                 if (i <= 10) | ||||||
|  |                 { | ||||||
|  |                     ball.GetComponent<Renderer>().material.color = Color.red; //给头部添加颜色 | ||||||
|  |                 } | ||||||
|  |                 else if (i <= 22) | ||||||
|  |                 { | ||||||
|  |                     ball.GetComponent<Renderer>().material.color = Color.blue; //给手部添加颜色 | ||||||
|  |                 } | ||||||
|  |                 else if (i <= 32) | ||||||
|  |                 { | ||||||
|  |                     ball.GetComponent<Renderer>().material.color = Color.green; //给脚部添加颜色 | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 _nodes[i] = ball; | ||||||
|  |                 _poseTransforms[i] = new PoseTransform(i, new AverageHandler()); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void CreateBonds() | ||||||
|  |         { | ||||||
|  |             var headBonds = new[] | ||||||
|  |             { | ||||||
|  |                 PoseLandmarkType.RightEar, | ||||||
|  |                 PoseLandmarkType.RightEyeOuter, | ||||||
|  |                 PoseLandmarkType.RightEye, | ||||||
|  |                 PoseLandmarkType.RightEyeInner, | ||||||
|  |                 PoseLandmarkType.Nose, | ||||||
|  |                 PoseLandmarkType.LeftEyeInner, | ||||||
|  |                 PoseLandmarkType.LeftEye, | ||||||
|  |                 PoseLandmarkType.LeftEyeOuter, | ||||||
|  |                 PoseLandmarkType.LeftEar | ||||||
|  |             }; | ||||||
|  |             _bonds.AddRange(GenerateBondsList(headBonds)); | ||||||
|  | 
 | ||||||
|  |             var monthBonds = new[] | ||||||
|  |             { | ||||||
|  |                 PoseLandmarkType.MouthLeft, | ||||||
|  |                 PoseLandmarkType.MouthRight, | ||||||
|  |             }; | ||||||
|  |             _bonds.AddRange(GenerateBondsList(monthBonds)); | ||||||
|  | 
 | ||||||
|  |             var leftArmBonds = new[] | ||||||
|  |             { | ||||||
|  |                 PoseLandmarkType.LeftShoulder, | ||||||
|  |                 PoseLandmarkType.LeftElbow, | ||||||
|  |                 PoseLandmarkType.LeftWrist, | ||||||
|  |                 PoseLandmarkType.LeftPinky, | ||||||
|  |                 PoseLandmarkType.LeftIndex, | ||||||
|  |                 PoseLandmarkType.LeftWrist, | ||||||
|  |                 PoseLandmarkType.LeftThumb | ||||||
|  |             }; | ||||||
|  |             _bonds.AddRange(GenerateBondsList(leftArmBonds)); | ||||||
|  | 
 | ||||||
|  |             var rightArmBonds = new[] | ||||||
|  |             { | ||||||
|  |                 PoseLandmarkType.RightShoulder, | ||||||
|  |                 PoseLandmarkType.RightElbow, | ||||||
|  |                 PoseLandmarkType.RightWrist, | ||||||
|  |                 PoseLandmarkType.RightPinky, | ||||||
|  |                 PoseLandmarkType.RightIndex, | ||||||
|  |                 PoseLandmarkType.RightWrist, | ||||||
|  |                 PoseLandmarkType.RightThumb | ||||||
|  |             }; | ||||||
|  |             _bonds.AddRange(GenerateBondsList(rightArmBonds)); | ||||||
|  | 
 | ||||||
|  |             var leftLegBonds = new[] | ||||||
|  |             { | ||||||
|  |                 PoseLandmarkType.LeftShoulder, | ||||||
|  |                 PoseLandmarkType.LeftHip, | ||||||
|  |                 PoseLandmarkType.LeftKnee, | ||||||
|  |                 PoseLandmarkType.LeftAnkle, | ||||||
|  |                 PoseLandmarkType.LeftHeel, | ||||||
|  |                 PoseLandmarkType.LeftFootIndex, | ||||||
|  |                 PoseLandmarkType.LeftAnkle | ||||||
|  |             }; | ||||||
|  |             _bonds.AddRange(GenerateBondsList(leftLegBonds)); | ||||||
|  | 
 | ||||||
|  |             var rightLegBonds = new[] | ||||||
|  |             { | ||||||
|  |                 PoseLandmarkType.RightShoulder, | ||||||
|  |                 PoseLandmarkType.RightHip, | ||||||
|  |                 PoseLandmarkType.RightKnee, | ||||||
|  |                 PoseLandmarkType.RightAnkle, | ||||||
|  |                 PoseLandmarkType.RightHeel, | ||||||
|  |                 PoseLandmarkType.RightFootIndex, | ||||||
|  |                 PoseLandmarkType.RightAnkle | ||||||
|  |             }; | ||||||
|  |             _bonds.AddRange(GenerateBondsList(rightLegBonds)); | ||||||
|  | 
 | ||||||
|  |             // 最后手动添加身体上的两条横线 | ||||||
|  |             _bonds.Add(new Bond( | ||||||
|  |                 _nodes[PoseLandmarkType.LeftShoulder], | ||||||
|  |                 _nodes[PoseLandmarkType.RightShoulder], | ||||||
|  |                 Scale)); | ||||||
|  |             _bonds.Add(new Bond( | ||||||
|  |                 _nodes[PoseLandmarkType.LeftHip], | ||||||
|  |                 _nodes[PoseLandmarkType.RightHip], | ||||||
|  |                 Scale)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 创建棍子列表 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="nodes">需要连接起来的关键点 需要按顺序设置</param> | ||||||
|  |         /// <returns></returns> | ||||||
|  |         private List<Bond> GenerateBondsList(int[] nodes) | ||||||
|  |         { | ||||||
|  |             var bonds = new List<Bond>(); | ||||||
|  | 
 | ||||||
|  |             for (var i = 0; i < nodes.Length - 1; i++) | ||||||
|  |             { | ||||||
|  |                 bonds.Add(new Bond( | ||||||
|  |                     _nodes[nodes[i]], | ||||||
|  |                     _nodes[nodes[i + 1]], | ||||||
|  |                     Scale)); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             return bonds; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,5 +1,5 @@ | |||||||
| fileFormatVersion: 2 | fileFormatVersion: 2 | ||||||
| guid: 11e8a976fe328b1c3bdf9f44ef9f6fa1 | guid: 574a3724e040787f7afd9341fba89cf2 | ||||||
| MonoImporter: | MonoImporter: | ||||||
|   externalObjects: {} |   externalObjects: {} | ||||||
|   serializedVersion: 2 |   serializedVersion: 2 | ||||||
							
								
								
									
										272
									
								
								Assets/Behaviours/BoneBehaviour.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										272
									
								
								Assets/Behaviours/BoneBehaviour.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,272 @@ | |||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using Models; | ||||||
|  | using UnityEngine; | ||||||
|  | 
 | ||||||
|  | namespace Behaviours | ||||||
|  | { | ||||||
|  |     public class BoneBehaviour : MonoBehaviour | ||||||
|  |     { | ||||||
|  |         private readonly UdpListener _listener = new UdpListener(); | ||||||
|  |         private readonly GameObject[] _nodes = new GameObject[PoseLandmarkType.MaxValue]; | ||||||
|  |         private readonly List<Bond> _bonds = new List<Bond>(); | ||||||
|  |         private Dictionary<HumanBodyBones, RotationNode> _rotationNodes; | ||||||
|  |         private List<PoseLandmark> _landmarks; | ||||||
|  | 
 | ||||||
|  |         private Animator _animator; | ||||||
|  |         private bool _isReceived; | ||||||
|  |         private const float Scale = 0.2f; | ||||||
|  | 
 | ||||||
|  |         private void Start() | ||||||
|  |         { | ||||||
|  |             _animator = GetComponent<Animator>(); | ||||||
|  |             CreateRotationNodes(); | ||||||
|  |             CreateNodes(); | ||||||
|  |             CreateBonds(); | ||||||
|  | 
 | ||||||
|  |             _listener.AddHandler(OnReceive); | ||||||
|  |             _listener.Connect(5000); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void Update() | ||||||
|  |         { | ||||||
|  |             if (_isReceived) | ||||||
|  |             { | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.Hips).rotation =  | ||||||
|  |                     _rotationNodes[HumanBodyBones.Hips].Rotation; | ||||||
|  | 
 | ||||||
|  |                 /*var rotation = _rotationNodes[HumanBodyBones.Hips].CalculateRotate | ||||||
|  |                                * Quaternion.Inverse(_rotationNodes[HumanBodyBones.RightUpperArm].CalculateRotate); | ||||||
|  | 
 | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.RightUpperArm).Rotate(rotation.eulerAngles);*/ | ||||||
|  |                  | ||||||
|  |                 var mid = (_landmarks[PoseLandmarkType.LeftHip].Position +  | ||||||
|  |                            _landmarks[PoseLandmarkType.RightHip].Position) / 2; | ||||||
|  | 
 | ||||||
|  |                 for (var i = 0; i < PoseLandmarkType.MaxValue; i++) | ||||||
|  |                 { | ||||||
|  |                     _nodes[i].transform.position = (_landmarks[i].Position - mid) * 5f; | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 foreach (var bond in _bonds) | ||||||
|  |                 { | ||||||
|  |                     bond.UpdateBond(); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.LeftUpperArm).rotation = _bonds[9].Rotation; | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.LeftUpperArm).Rotate(0, -180, 0,  | ||||||
|  |                     Space.Self); | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.LeftLowerArm).rotation = _bonds[10].Rotation; | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.LeftLowerArm).Rotate(0, -180, 0,  | ||||||
|  |                     Space.Self); | ||||||
|  |                  | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.RightUpperArm).rotation = _bonds[15].Rotation; | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.RightUpperArm).Rotate(0, -180, 0,  | ||||||
|  |                     Space.Self); | ||||||
|  |                  | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.RightLowerArm).rotation = _bonds[16].Rotation; | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.RightLowerArm).Rotate(0, -180, 0,  | ||||||
|  |                     Space.Self); | ||||||
|  | 
 | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.LeftUpperLeg).rotation = _bonds[22].Rotation; | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.LeftUpperLeg).Rotate(0, -180, 0,  | ||||||
|  |                     Space.Self); | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.LeftLowerLeg).rotation = _bonds[23].Rotation; | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.LeftLowerLeg).Rotate(0, -180, 0,  | ||||||
|  |                     Space.Self); | ||||||
|  | 
 | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.RightUpperLeg).rotation = _bonds[28].Rotation; | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.RightUpperLeg).Rotate(0, -180, 0,  | ||||||
|  |                     Space.Self); | ||||||
|  |                  | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.RightLowerLeg).rotation = _bonds[29].Rotation; | ||||||
|  |                 _animator.GetBoneTransform(HumanBodyBones.RightLowerLeg).Rotate(0, -180, 0,  | ||||||
|  |                     Space.Self); | ||||||
|  |                  | ||||||
|  |                 _isReceived = false; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  |         private void OnDisable() | ||||||
|  |         { | ||||||
|  |             _listener.DisConnect(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnReceive(List<PoseLandmark> landmarks) | ||||||
|  |         { | ||||||
|  |             // 计算腰部 | ||||||
|  |             var frontLeft = Vector3.Cross( | ||||||
|  |                 landmarks[PoseLandmarkType.RightHip].Position - landmarks[PoseLandmarkType.LeftHip].Position, | ||||||
|  |                 landmarks[PoseLandmarkType.RightShoulder].Position - landmarks[PoseLandmarkType.LeftHip].Position); | ||||||
|  | 
 | ||||||
|  |             var frontRight = Vector3.Cross( | ||||||
|  |                 landmarks[PoseLandmarkType.LeftShoulder].Position - landmarks[PoseLandmarkType.RightHip].Position, | ||||||
|  |                 landmarks[PoseLandmarkType.LeftHip].Position - landmarks[PoseLandmarkType.LeftHip].Position); | ||||||
|  | 
 | ||||||
|  |             var front = frontLeft + frontRight; | ||||||
|  |             front.Normalize(); | ||||||
|  | 
 | ||||||
|  |             var oldRotation = _rotationNodes[HumanBodyBones.Hips]; | ||||||
|  |             _rotationNodes[HumanBodyBones.Hips] = new RotationNode( | ||||||
|  |                 oldRotation.UnityName, | ||||||
|  |                 oldRotation.Rotation, | ||||||
|  |                 Quaternion.LookRotation(front)); | ||||||
|  | 
 | ||||||
|  |             _landmarks = landmarks; | ||||||
|  |             _isReceived = true; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void CreateRotationNodes() | ||||||
|  |         { | ||||||
|  |             _rotationNodes = new Dictionary<HumanBodyBones, RotationNode>(); | ||||||
|  | 
 | ||||||
|  |             var bonesArray = new[] | ||||||
|  |             { | ||||||
|  |                 HumanBodyBones.Hips, | ||||||
|  |                 HumanBodyBones.LeftUpperArm, | ||||||
|  |                 HumanBodyBones.LeftLowerArm, | ||||||
|  |                 HumanBodyBones.RightUpperArm, | ||||||
|  |                 HumanBodyBones.RightLowerArm, | ||||||
|  |                 HumanBodyBones.LeftUpperLeg, | ||||||
|  |                 HumanBodyBones.LeftLowerLeg, | ||||||
|  |                 HumanBodyBones.RightUpperLeg, | ||||||
|  |                 HumanBodyBones.RightLowerLeg | ||||||
|  |             }; | ||||||
|  | 
 | ||||||
|  |             foreach (var bone in bonesArray) | ||||||
|  |             { | ||||||
|  |                 var rotation = _animator.GetBoneTransform(bone).rotation; | ||||||
|  |                 _rotationNodes.Add(bone, new RotationNode(bone, rotation, rotation)); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private void CreateNodes() | ||||||
|  |         { | ||||||
|  |             for (var i = 0; i < PoseLandmarkType.MaxValue; i++) | ||||||
|  |             { | ||||||
|  |                 var ball = GameObject.CreatePrimitive(PrimitiveType.Sphere); | ||||||
|  | 
 | ||||||
|  |                 ball.transform.localScale = new Vector3(Scale, Scale, Scale); | ||||||
|  | 
 | ||||||
|  |                 if (i <= 10) | ||||||
|  |                 { | ||||||
|  |                     ball.GetComponent<Renderer>().material.color = Color.red; //给头部添加颜色 | ||||||
|  |                 } | ||||||
|  |                 else if (i <= 22) | ||||||
|  |                 { | ||||||
|  |                     ball.GetComponent<Renderer>().material.color = Color.blue; //给手部添加颜色 | ||||||
|  |                 } | ||||||
|  |                 else if (i <= 32) | ||||||
|  |                 { | ||||||
|  |                     ball.GetComponent<Renderer>().material.color = Color.green; //给脚部添加颜色 | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 _nodes[i] = ball; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void CreateBonds() | ||||||
|  |         { | ||||||
|  |             var headBonds = new[] | ||||||
|  |             { | ||||||
|  |                 PoseLandmarkType.RightEar, | ||||||
|  |                 PoseLandmarkType.RightEyeOuter, | ||||||
|  |                 PoseLandmarkType.RightEye, | ||||||
|  |                 PoseLandmarkType.RightEyeInner, | ||||||
|  |                 PoseLandmarkType.Nose, | ||||||
|  |                 PoseLandmarkType.LeftEyeInner, | ||||||
|  |                 PoseLandmarkType.LeftEye, | ||||||
|  |                 PoseLandmarkType.LeftEyeOuter, | ||||||
|  |                 PoseLandmarkType.LeftEar | ||||||
|  |             }; | ||||||
|  |             _bonds.AddRange(GenerateBondsList(headBonds)); | ||||||
|  | 
 | ||||||
|  |             var monthBonds = new[] | ||||||
|  |             { | ||||||
|  |                 PoseLandmarkType.MouthLeft, | ||||||
|  |                 PoseLandmarkType.MouthRight, | ||||||
|  |             }; | ||||||
|  |             _bonds.AddRange(GenerateBondsList(monthBonds)); | ||||||
|  | 
 | ||||||
|  |             var leftArmBonds = new[] | ||||||
|  |             { | ||||||
|  |                 PoseLandmarkType.LeftShoulder, | ||||||
|  |                 PoseLandmarkType.LeftElbow, | ||||||
|  |                 PoseLandmarkType.LeftWrist, | ||||||
|  |                 PoseLandmarkType.LeftPinky, | ||||||
|  |                 PoseLandmarkType.LeftIndex, | ||||||
|  |                 PoseLandmarkType.LeftWrist, | ||||||
|  |                 PoseLandmarkType.LeftThumb | ||||||
|  |             }; | ||||||
|  |             _bonds.AddRange(GenerateBondsList(leftArmBonds)); | ||||||
|  | 
 | ||||||
|  |             var rightArmBonds = new[] | ||||||
|  |             { | ||||||
|  |                 PoseLandmarkType.RightShoulder, | ||||||
|  |                 PoseLandmarkType.RightElbow, | ||||||
|  |                 PoseLandmarkType.RightWrist, | ||||||
|  |                 PoseLandmarkType.RightPinky, | ||||||
|  |                 PoseLandmarkType.RightIndex, | ||||||
|  |                 PoseLandmarkType.RightWrist, | ||||||
|  |                 PoseLandmarkType.RightThumb | ||||||
|  |             }; | ||||||
|  |             _bonds.AddRange(GenerateBondsList(rightArmBonds)); | ||||||
|  | 
 | ||||||
|  |             var leftLegBonds = new[] | ||||||
|  |             { | ||||||
|  |                 PoseLandmarkType.LeftShoulder, | ||||||
|  |                 PoseLandmarkType.LeftHip, | ||||||
|  |                 PoseLandmarkType.LeftKnee, | ||||||
|  |                 PoseLandmarkType.LeftAnkle, | ||||||
|  |                 PoseLandmarkType.LeftHeel, | ||||||
|  |                 PoseLandmarkType.LeftFootIndex, | ||||||
|  |                 PoseLandmarkType.LeftAnkle | ||||||
|  |             }; | ||||||
|  |             _bonds.AddRange(GenerateBondsList(leftLegBonds)); | ||||||
|  | 
 | ||||||
|  |             var rightLegBonds = new[] | ||||||
|  |             { | ||||||
|  |                 PoseLandmarkType.RightShoulder, | ||||||
|  |                 PoseLandmarkType.RightHip, | ||||||
|  |                 PoseLandmarkType.RightKnee, | ||||||
|  |                 PoseLandmarkType.RightAnkle, | ||||||
|  |                 PoseLandmarkType.RightHeel, | ||||||
|  |                 PoseLandmarkType.RightFootIndex, | ||||||
|  |                 PoseLandmarkType.RightAnkle | ||||||
|  |             }; | ||||||
|  |             _bonds.AddRange(GenerateBondsList(rightLegBonds)); | ||||||
|  | 
 | ||||||
|  |             // 最后手动添加身体上的两条横线 | ||||||
|  |             _bonds.Add(new Bond( | ||||||
|  |                 _nodes[PoseLandmarkType.LeftShoulder], | ||||||
|  |                 _nodes[PoseLandmarkType.RightShoulder], | ||||||
|  |                 Scale)); | ||||||
|  |             _bonds.Add(new Bond( | ||||||
|  |                 _nodes[PoseLandmarkType.LeftHip], | ||||||
|  |                 _nodes[PoseLandmarkType.RightHip], | ||||||
|  |                 Scale)); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         /// <summary> | ||||||
|  |         /// 创建棍子列表 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="nodes">需要连接起来的关键点 需要按顺序设置</param> | ||||||
|  |         /// <returns></returns> | ||||||
|  |         private List<Bond> GenerateBondsList(int[] nodes) | ||||||
|  |         { | ||||||
|  |             var bonds = new List<Bond>(); | ||||||
|  | 
 | ||||||
|  |             for (var i = 0; i < nodes.Length - 1; i++) | ||||||
|  |             { | ||||||
|  |                 bonds.Add(new Bond( | ||||||
|  |                     _nodes[nodes[i]], | ||||||
|  |                     _nodes[nodes[i + 1]], | ||||||
|  |                     Scale)); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             return bonds; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										11
									
								
								Assets/Behaviours/BoneBehaviour.cs.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Assets/Behaviours/BoneBehaviour.cs.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: a2b060336532a01bfb4593b385955175 | ||||||
|  | MonoImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   defaultReferences: [] | ||||||
|  |   executionOrder: 0 | ||||||
|  |   icon: {instanceID: 0} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
							
								
								
									
										55
									
								
								Assets/BoneAnimator.controller
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								Assets/BoneAnimator.controller
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | |||||||
|  | %YAML 1.1 | ||||||
|  | %TAG !u! tag:unity3d.com,2011: | ||||||
|  | --- !u!114 &-6275755417433151442 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 1 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 0} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: a2b060336532a01bfb4593b385955175, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  | --- !u!1107 &-4834836044711832442 | ||||||
|  | AnimatorStateMachine: | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_ObjectHideFlags: 1 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_Name: Base Layer | ||||||
|  |   m_ChildStates: [] | ||||||
|  |   m_ChildStateMachines: [] | ||||||
|  |   m_AnyStateTransitions: [] | ||||||
|  |   m_EntryTransitions: [] | ||||||
|  |   m_StateMachineTransitions: {} | ||||||
|  |   m_StateMachineBehaviours: [] | ||||||
|  |   m_AnyStatePosition: {x: 50, y: 20, z: 0} | ||||||
|  |   m_EntryPosition: {x: 50, y: 120, z: 0} | ||||||
|  |   m_ExitPosition: {x: 800, y: 120, z: 0} | ||||||
|  |   m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} | ||||||
|  |   m_DefaultState: {fileID: 0} | ||||||
|  | --- !u!91 &9100000 | ||||||
|  | AnimatorController: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_Name: BoneAnimator | ||||||
|  |   serializedVersion: 5 | ||||||
|  |   m_AnimatorParameters: [] | ||||||
|  |   m_AnimatorLayers: | ||||||
|  |   - serializedVersion: 5 | ||||||
|  |     m_Name: Base Layer | ||||||
|  |     m_StateMachine: {fileID: -4834836044711832442} | ||||||
|  |     m_Mask: {fileID: 0} | ||||||
|  |     m_Motions: [] | ||||||
|  |     m_Behaviours: [] | ||||||
|  |     m_BlendingMode: 0 | ||||||
|  |     m_SyncedLayerIndex: -1 | ||||||
|  |     m_DefaultWeight: 0 | ||||||
|  |     m_IKPass: 1 | ||||||
|  |     m_SyncedLayerAffectsTiming: 0 | ||||||
|  |     m_Controller: {fileID: 9100000} | ||||||
							
								
								
									
										8
									
								
								Assets/BoneAnimator.controller.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Assets/BoneAnimator.controller.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 7406b3b3cd1a7812ca7823cf800c679b | ||||||
|  | NativeFormatImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   mainObjectFileID: 9100000 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
| @@ -1,38 +0,0 @@ | |||||||
| using System; |  | ||||||
| using System.Collections; |  | ||||||
| using System.Collections.Generic; |  | ||||||
| using System.Text; |  | ||||||
| using Models; |  | ||||||
| using UnityEngine; |  | ||||||
| 
 |  | ||||||
| public class CubeBehaviour : MonoBehaviour |  | ||||||
| { |  | ||||||
|     public Vector3 rotateAmount = new Vector3(0, 1, 0); |  | ||||||
|     private readonly UdpListener _listener = new UdpListener(); |  | ||||||
|      |  | ||||||
|     // Start is called before the first frame update |  | ||||||
|     private void Start() |  | ||||||
|     { |  | ||||||
|         _listener.AddHandler(LogLandmarks); |  | ||||||
|         _listener.Connect(5000); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // Update is called once per frame |  | ||||||
|     private void Update() |  | ||||||
|     { |  | ||||||
|         transform.Rotate(rotateAmount); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private void OnDisable() |  | ||||||
|     { |  | ||||||
|         _listener.DisConnect(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private static void LogLandmarks(List<PoseLandmark> landmarks) |  | ||||||
|     { |  | ||||||
|         foreach (var landmark in landmarks) |  | ||||||
|         { |  | ||||||
|             Debug.Log(landmark.ToString()); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
							
								
								
									
										8
									
								
								Assets/Materials.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Assets/Materials.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: c2963c03969c7f6d480483b45e36590b | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
							
								
								
									
										80
									
								
								Assets/Materials/PlaneMaterial.mat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								Assets/Materials/PlaneMaterial.mat
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | |||||||
|  | %YAML 1.1 | ||||||
|  | %TAG !u! tag:unity3d.com,2011: | ||||||
|  | --- !u!21 &2100000 | ||||||
|  | Material: | ||||||
|  |   serializedVersion: 8 | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_Name: PlaneMaterial | ||||||
|  |   m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} | ||||||
|  |   m_ValidKeywords: [] | ||||||
|  |   m_InvalidKeywords: [] | ||||||
|  |   m_LightmapFlags: 4 | ||||||
|  |   m_EnableInstancingVariants: 0 | ||||||
|  |   m_DoubleSidedGI: 0 | ||||||
|  |   m_CustomRenderQueue: -1 | ||||||
|  |   stringTagMap: {} | ||||||
|  |   disabledShaderPasses: [] | ||||||
|  |   m_SavedProperties: | ||||||
|  |     serializedVersion: 3 | ||||||
|  |     m_TexEnvs: | ||||||
|  |     - _BumpMap: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _DetailAlbedoMap: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _DetailMask: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _DetailNormalMap: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _EmissionMap: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _MainTex: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _MetallicGlossMap: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _OcclusionMap: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _ParallaxMap: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     m_Ints: [] | ||||||
|  |     m_Floats: | ||||||
|  |     - _BumpScale: 1 | ||||||
|  |     - _Cutoff: 0.5 | ||||||
|  |     - _DetailNormalMapScale: 1 | ||||||
|  |     - _DstBlend: 0 | ||||||
|  |     - _GlossMapScale: 1 | ||||||
|  |     - _Glossiness: 0.5 | ||||||
|  |     - _GlossyReflections: 1 | ||||||
|  |     - _Metallic: 0 | ||||||
|  |     - _Mode: 0 | ||||||
|  |     - _OcclusionStrength: 1 | ||||||
|  |     - _Parallax: 0.02 | ||||||
|  |     - _SmoothnessTextureChannel: 0 | ||||||
|  |     - _SpecularHighlights: 1 | ||||||
|  |     - _SrcBlend: 1 | ||||||
|  |     - _UVSec: 0 | ||||||
|  |     - _ZWrite: 1 | ||||||
|  |     m_Colors: | ||||||
|  |     - _Color: {r: 1, g: 0.29922488, b: 0, a: 1} | ||||||
|  |     - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} | ||||||
|  |   m_BuildTextureStacks: [] | ||||||
							
								
								
									
										8
									
								
								Assets/Materials/PlaneMaterial.mat.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Assets/Materials/PlaneMaterial.mat.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 6083fe04391087ca294999838984a59c | ||||||
|  | NativeFormatImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   mainObjectFileID: 2100000 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
							
								
								
									
										48
									
								
								Assets/Models/Bond.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								Assets/Models/Bond.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,48 @@ | |||||||
|  | using UnityEngine; | ||||||
|  | using Utils; | ||||||
|  | 
 | ||||||
|  | namespace Models | ||||||
|  | { | ||||||
|  |     /// <summary> | ||||||
|  |     /// 捕捉点之间的连接线 | ||||||
|  |     /// </summary> | ||||||
|  |     public class Bond | ||||||
|  |     { | ||||||
|  |         protected readonly GameObject Start; | ||||||
|  |         protected readonly GameObject End; | ||||||
|  |         private readonly GameObject _bond; | ||||||
|  | 
 | ||||||
|  |         public Quaternion Rotation => _bond.transform.rotation; | ||||||
|  |         public Vector3 Vector => End.transform.position - Start.transform.position; | ||||||
|  |          | ||||||
|  |         public Bond(GameObject start,GameObject end,float scale) | ||||||
|  |         { | ||||||
|  |             Start = start; | ||||||
|  |             End = end; | ||||||
|  |              | ||||||
|  |             _bond = GameObject.CreatePrimitive(PrimitiveType.Cylinder); | ||||||
|  |              | ||||||
|  |             _bond.transform.localScale = new Vector3(scale/2, scale/2, scale/2); | ||||||
|  | 
 | ||||||
|  |             //这里可以设置材质,具体自己设置 | ||||||
|  |             _bond.GetComponent<Renderer>().material.color = Color.cyan; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         public void UpdateBond() | ||||||
|  |         { | ||||||
|  |             var startPos = Start.transform.position; | ||||||
|  |             var endPos = End.transform.position; | ||||||
|  |             var rightPosition = (startPos + endPos) / 2; | ||||||
|  |             var rightRotation = endPos - startPos; | ||||||
|  |             var halfLength = Vector3.Distance(startPos, endPos) / 2; | ||||||
|  |             var thickness = 0.1f;//线的粗细 | ||||||
|  |   | ||||||
|  |             //创建圆柱体 | ||||||
|  |             //bond.gameObject.transform.parent = transform; | ||||||
|  |             _bond.transform.position = rightPosition;    | ||||||
|  |             _bond.transform.rotation = Quaternion.FromToRotation(Vector3.up, rightRotation); | ||||||
|  |             _bond.transform.localScale = new Vector3(thickness, halfLength, thickness); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								Assets/Models/Bond.cs.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Assets/Models/Bond.cs.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 94a8f8c83e58421d9447173d38482d74 | ||||||
|  | timeCreated: 1677230676 | ||||||
| @@ -1,6 +1,7 @@ | |||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Text; | using System.Text; | ||||||
|  | using UnityEngine; | ||||||
| 
 | 
 | ||||||
| namespace Models | namespace Models | ||||||
| { | { | ||||||
| @@ -39,6 +40,8 @@ namespace Models | |||||||
|         /// </summary> |         /// </summary> | ||||||
|         public float Z { get; } |         public float Z { get; } | ||||||
| 
 | 
 | ||||||
|  |         public Vector3 Position => new Vector3(-X, -Y, -0.2f * Z); | ||||||
|  | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
|         /// 该坐标点估计的可见性 |         /// 该坐标点估计的可见性 | ||||||
|         /// [0,1] |         /// [0,1] | ||||||
| @@ -47,9 +50,9 @@ namespace Models | |||||||
| 
 | 
 | ||||||
|         public long TimeStamp { get; } |         public long TimeStamp { get; } | ||||||
| 
 | 
 | ||||||
|     public PoseLandmark(PoseLandmarkType type, float x, float y, float z, float visibility, long timeStamp) |         public PoseLandmark(int type, float x, float y, float z, float visibility, long timeStamp) | ||||||
|         { |         { | ||||||
|         Type = type; |             Type = new PoseLandmarkType(type); | ||||||
|             X = x; |             X = x; | ||||||
|             Y = y; |             Y = y; | ||||||
|             Z = z; |             Z = z; | ||||||
| @@ -66,7 +69,7 @@ namespace Models | |||||||
|         { |         { | ||||||
|             var result = new byte[PacketLength]; |             var result = new byte[PacketLength]; | ||||||
| 
 | 
 | ||||||
|         BitConverter.GetBytes((int)Type).CopyTo(result, 0); |             BitConverter.GetBytes(Type.Value).CopyTo(result, 0); | ||||||
|             BitConverter.GetBytes(X).CopyTo(result, 4); |             BitConverter.GetBytes(X).CopyTo(result, 4); | ||||||
|             BitConverter.GetBytes(Y).CopyTo(result, 8); |             BitConverter.GetBytes(Y).CopyTo(result, 8); | ||||||
|             BitConverter.GetBytes(Z).CopyTo(result, 12); |             BitConverter.GetBytes(Z).CopyTo(result, 12); | ||||||
| @@ -84,7 +87,7 @@ namespace Models | |||||||
|         public static PoseLandmark ValueOf(byte[] bytes) |         public static PoseLandmark ValueOf(byte[] bytes) | ||||||
|         { |         { | ||||||
|             var result = new PoseLandmark( |             var result = new PoseLandmark( | ||||||
|             (PoseLandmarkType)BitConverter.ToInt32(bytes, 0), |                 BitConverter.ToInt32(bytes, 0), | ||||||
|                 BitConverter.ToSingle(bytes, 4), |                 BitConverter.ToSingle(bytes, 4), | ||||||
|                 BitConverter.ToSingle(bytes, 8), |                 BitConverter.ToSingle(bytes, 8), | ||||||
|                 BitConverter.ToSingle(bytes, 12), |                 BitConverter.ToSingle(bytes, 12), | ||||||
| @@ -106,7 +109,7 @@ namespace Models | |||||||
| 
 | 
 | ||||||
|             for (var i = 0; i < bytes.Length; i = i + PacketLength) |             for (var i = 0; i < bytes.Length; i = i + PacketLength) | ||||||
|             { |             { | ||||||
|             var landmark = new PoseLandmark((PoseLandmarkType)BitConverter.ToInt32(bytes, i), |                 var landmark = new PoseLandmark(BitConverter.ToInt32(bytes, i), | ||||||
|                     BitConverter.ToSingle(bytes, i + 4), |                     BitConverter.ToSingle(bytes, i + 4), | ||||||
|                     BitConverter.ToSingle(bytes, i + 8), |                     BitConverter.ToSingle(bytes, i + 8), | ||||||
|                     BitConverter.ToSingle(bytes, i + 12), |                     BitConverter.ToSingle(bytes, i + 12), | ||||||
| @@ -127,7 +130,7 @@ namespace Models | |||||||
|             } |             } | ||||||
|             else |             else | ||||||
|             { |             { | ||||||
|             return Type == landmark.Type |                 return Type.Value == landmark.Type.Value | ||||||
|                        && Math.Abs(X - landmark.X) < Tolerance |                        && Math.Abs(X - landmark.X) < Tolerance | ||||||
|                        && Math.Abs(Y - landmark.Y) < Tolerance |                        && Math.Abs(Y - landmark.Y) < Tolerance | ||||||
|                        && Math.Abs(Z - landmark.Z) < Tolerance |                        && Math.Abs(Z - landmark.Z) < Tolerance | ||||||
|   | |||||||
| @@ -1,40 +1,70 @@ | |||||||
|  | using System; | ||||||
|  | 
 | ||||||
| namespace Models | namespace Models | ||||||
| { | { | ||||||
|    //名字  |    //名字  | ||||||
|     public enum PoseLandmarkType |    public readonly struct PoseLandmarkType | ||||||
|    { |    { | ||||||
|         Nose, |       public const int Nose = 0; | ||||||
|         LeftEyeInner, |       public const int LeftEyeInner = 1; | ||||||
|         LeftEye, |       public const int LeftEye = 2; | ||||||
|         LeftEyeOuter, |       public const int LeftEyeOuter = 3; | ||||||
|         RightEyeInner, |       public const int RightEyeInner = 4; | ||||||
|         RightEye, |       public const int RightEye = 5; | ||||||
|         RightEyeOuter, |       public const int RightEyeOuter = 6; | ||||||
|         LeftEar, |       public const int LeftEar = 7; | ||||||
|         RightEar, |       public const int RightEar = 8; | ||||||
|         MouthLeft, |       public const int MouthLeft = 9; | ||||||
|         MouthRight, |       public const int MouthRight = 10; | ||||||
|         LeftShoulder, |       public const int LeftShoulder = 11; | ||||||
|         RightShoulder, |       public const int RightShoulder = 12; | ||||||
|         LeftElbow, |       public const int LeftElbow = 13; | ||||||
|         RightElbow, |       public const int RightElbow = 14; | ||||||
|         LeftWrist, |       public const int LeftWrist = 15; | ||||||
|         RightWrist, |       public const int RightWrist = 16; | ||||||
|         LeftPinky, |       public const int LeftPinky = 17; | ||||||
|         RightPinky, |       public const int RightPinky = 18; | ||||||
|         LeftIndex, |       public const int LeftIndex = 19; | ||||||
|         RightIndex, |       public const int RightIndex = 20; | ||||||
|         LeftThumb, |       public const int LeftThumb = 21; | ||||||
|         RightThumb, |       public const int RightThumb = 22; | ||||||
|         LeftHip, |       public const int LeftHip = 23; | ||||||
|         RightHip, |       public const int RightHip = 24; | ||||||
|         LeftKnee, |       public const int LeftKnee = 25; | ||||||
|         RightKnee, |       public const int RightKnee = 26; | ||||||
|         LeftAnkle, |       public const int LeftAnkle = 27; | ||||||
|         RightAnkle, |       public const int RightAnkle = 28; | ||||||
|         LeftHeel, |       public const int LeftHeel = 29; | ||||||
|         RightHeel, |       public const int RightHeel = 30; | ||||||
|         LeftFootIndex, |       public const int LeftFootIndex = 31; | ||||||
|         RightFootIndex |       public const int RightFootIndex = 32; | ||||||
|  |       public const int MaxValue = 33; | ||||||
|  |        | ||||||
|  |       public int Value { get; } | ||||||
|  | 
 | ||||||
|  |       public PoseLandmarkType(int value) | ||||||
|  |       { | ||||||
|  |          if (value >= MaxValue) | ||||||
|  |          { | ||||||
|  |             throw new ArgumentOutOfRangeException(nameof(value)); | ||||||
|  |          } | ||||||
|  |           | ||||||
|  |          Value = value; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       public override bool Equals(object obj) | ||||||
|  |       { | ||||||
|  |          return Value.Equals(obj); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       public override int GetHashCode() | ||||||
|  |       { | ||||||
|  |          return Value.GetHashCode(); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       public override string ToString() | ||||||
|  |       { | ||||||
|  |          return Value.ToString(); | ||||||
|  |       } | ||||||
|    } |    } | ||||||
| } | } | ||||||
							
								
								
									
										120
									
								
								Assets/Models/PoseTransform.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								Assets/Models/PoseTransform.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,120 @@ | |||||||
|  | using System.Collections.Generic; | ||||||
|  | using UnityEngine; | ||||||
|  | using Utils; | ||||||
|  | 
 | ||||||
|  | namespace Models | ||||||
|  | { | ||||||
|  |     /// <summary> | ||||||
|  |     /// 捕捉骨骼的动作转换 | ||||||
|  |     /// </summary> | ||||||
|  |     public struct PoseTransform | ||||||
|  |     { | ||||||
|  |         /// <summary> | ||||||
|  |         /// MediaPipe中动捕节点标识 | ||||||
|  |         /// </summary> | ||||||
|  |         public readonly PoseLandmarkType MediaPipeName; | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// Unity中绑定骨骼名称 | ||||||
|  |         /// </summary> | ||||||
|  |         public readonly HumanBodyBones UnityName; | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 取平均的长度 | ||||||
|  |         /// </summary> | ||||||
|  |         public static int AverageLength = 3; | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 取平均之后的结果 | ||||||
|  |         /// </summary> | ||||||
|  |         public Vector3 ResultPosition => _transformHandler.GetResultPosition(); | ||||||
|  |         /// <summary> | ||||||
|  |         /// 节点的父节点列表 | ||||||
|  |         /// </summary> | ||||||
|  |         public readonly List<PoseLandmarkType> Parent; | ||||||
|  | 
 | ||||||
|  |         private readonly IPoseTransformHandler _transformHandler; | ||||||
|  | 
 | ||||||
|  |         public PoseTransform( | ||||||
|  |             int type, | ||||||
|  |             IPoseTransformHandler handler | ||||||
|  |         ) | ||||||
|  |         { | ||||||
|  |             MediaPipeName = new PoseLandmarkType(type); | ||||||
|  |             UnityName = GetRelatedBone(MediaPipeName); | ||||||
|  |             Parent = new List<PoseLandmarkType>(); | ||||||
|  |              | ||||||
|  |             _transformHandler = handler; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public static void UpdatePosition(ref PoseTransform pose, PoseLandmark landmark) | ||||||
|  |         { | ||||||
|  |             pose._transformHandler.ReceivePoseLandmark(landmark); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public static Vector3 operator +(PoseTransform a) => a.ResultPosition; | ||||||
|  | 
 | ||||||
|  |         public static Vector3 operator -(PoseTransform a) => -a.ResultPosition; | ||||||
|  | 
 | ||||||
|  |         public static Vector3 operator +(PoseTransform a, PoseTransform b) =>  | ||||||
|  |             a.ResultPosition + b.ResultPosition; | ||||||
|  | 
 | ||||||
|  |         public static Vector3 operator -(PoseTransform a, PoseTransform b) => | ||||||
|  |             a.ResultPosition - b.ResultPosition; | ||||||
|  | 
 | ||||||
|  |         public static Vector3 operator *(PoseTransform a, int b) => | ||||||
|  |             a.ResultPosition * b; | ||||||
|  | 
 | ||||||
|  |         public static Vector3 operator *(int a, PoseTransform b) => | ||||||
|  |             a * b.ResultPosition; | ||||||
|  | 
 | ||||||
|  |         public static Vector3 operator /(PoseTransform a, int b) => | ||||||
|  |             a.ResultPosition / b; | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 获得同相关捕捉点关联的骨骼 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="type">捕捉点的种类</param> | ||||||
|  |         /// <returns>关联骨骼的种类</returns> | ||||||
|  |         private static HumanBodyBones GetRelatedBone(PoseLandmarkType type) | ||||||
|  |         { | ||||||
|  |             switch (type.Value) | ||||||
|  |             { | ||||||
|  |                 case PoseLandmarkType.LeftHip: | ||||||
|  |                     return HumanBodyBones.LeftUpperLeg; | ||||||
|  |                 case PoseLandmarkType.RightHip: | ||||||
|  |                     return HumanBodyBones.RightUpperLeg; | ||||||
|  |                 case PoseLandmarkType.LeftShoulder: | ||||||
|  |                     return HumanBodyBones.LeftUpperArm; | ||||||
|  |                 case PoseLandmarkType.RightShoulder: | ||||||
|  |                     return HumanBodyBones.RightUpperArm; | ||||||
|  |                 case PoseLandmarkType.Nose: | ||||||
|  |                     return HumanBodyBones.Head; | ||||||
|  |                 case PoseLandmarkType.LeftElbow: | ||||||
|  |                     return HumanBodyBones.LeftLowerArm; | ||||||
|  |                 case PoseLandmarkType.RightElbow: | ||||||
|  |                     return HumanBodyBones.RightLowerArm; | ||||||
|  |                 case PoseLandmarkType.LeftWrist: | ||||||
|  |                     return HumanBodyBones.LeftHand; | ||||||
|  |                 case PoseLandmarkType.RightWrist: | ||||||
|  |                     return HumanBodyBones.RightHand; | ||||||
|  |                 case PoseLandmarkType.LeftKnee: | ||||||
|  |                     return HumanBodyBones.LeftLowerLeg; | ||||||
|  |                 case PoseLandmarkType.RightKnee: | ||||||
|  |                     return HumanBodyBones.RightLowerLeg; | ||||||
|  |                 case PoseLandmarkType.LeftAnkle: | ||||||
|  |                     return HumanBodyBones.LeftFoot; | ||||||
|  |                 case PoseLandmarkType.RightAnkle: | ||||||
|  |                     return HumanBodyBones.RightFoot; | ||||||
|  |                 case PoseLandmarkType.LeftFootIndex: | ||||||
|  |                     return HumanBodyBones.LeftToes; | ||||||
|  |                 case PoseLandmarkType.RightFootIndex: | ||||||
|  |                     return HumanBodyBones.RightToes; | ||||||
|  |                 default: | ||||||
|  |                     return HumanBodyBones.LastBone; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								Assets/Models/PoseTransform.cs.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Assets/Models/PoseTransform.cs.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 9e38fe43bac14375a4f16690d139411f | ||||||
|  | timeCreated: 1676859644 | ||||||
							
								
								
									
										29
									
								
								Assets/Models/RotationNode.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								Assets/Models/RotationNode.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | using UnityEngine; | ||||||
|  | 
 | ||||||
|  | namespace Models | ||||||
|  | { | ||||||
|  |     public struct RotationNode | ||||||
|  |     { | ||||||
|  |         public readonly HumanBodyBones UnityName; | ||||||
|  |         public Quaternion PreviousRotation; | ||||||
|  |         public Quaternion Rotation; | ||||||
|  | 
 | ||||||
|  |         public Quaternion CalculateRotate => PreviousRotation * Quaternion.Inverse(Rotation); | ||||||
|  | 
 | ||||||
|  |         public RotationNode(HumanBodyBones humanBodyBone, Quaternion previousRotation, Quaternion rotation) | ||||||
|  |         { | ||||||
|  |             UnityName = humanBodyBone; | ||||||
|  |             PreviousRotation = previousRotation; | ||||||
|  |             Rotation = rotation; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public RotationNode(RotationNode node, PoseLandmark begin, PoseLandmark end) | ||||||
|  |         { | ||||||
|  |             UnityName = node.UnityName; | ||||||
|  |             PreviousRotation = node.Rotation; | ||||||
|  | 
 | ||||||
|  |             var forward = end.Position - begin.Position; | ||||||
|  |             Rotation = Quaternion.LookRotation(forward); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								Assets/Models/RotationNode.cs.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Assets/Models/RotationNode.cs.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 87e238cb51f34339a39945af13f43248 | ||||||
|  | timeCreated: 1680090845 | ||||||
							
								
								
									
										35
									
								
								Assets/Models/VirtualSkeleton.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								Assets/Models/VirtualSkeleton.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | using UnityEngine; | ||||||
|  | 
 | ||||||
|  | namespace Models | ||||||
|  | { | ||||||
|  |     public class VirtualSkeleton : Bond | ||||||
|  |     { | ||||||
|  |         private readonly GameObject _virtualSkeleton; | ||||||
|  | 
 | ||||||
|  |         public VirtualSkeleton(GameObject start,GameObject end,float scale) : base(start,end,scale) | ||||||
|  |         { | ||||||
|  |             _virtualSkeleton = GameObject.CreatePrimitive(PrimitiveType.Cylinder); | ||||||
|  |              | ||||||
|  |             _virtualSkeleton.transform.localScale = new Vector3(scale/2, scale/2, scale/2); | ||||||
|  |              | ||||||
|  |             _virtualSkeleton.GetComponent<Renderer>().material.color = Color.white; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 覆盖基类的更新方法 | ||||||
|  |         /// </summary> | ||||||
|  |         public new void UpdateBond() | ||||||
|  |         { | ||||||
|  |             var startPos = Start.transform.position; | ||||||
|  |             var endPos = End.transform.position; | ||||||
|  | 
 | ||||||
|  |             var rightPosition = (startPos + endPos) / 2; | ||||||
|  |             var rightRotation = endPos - startPos; | ||||||
|  |             var lThickness = 0.2f; | ||||||
|  | 
 | ||||||
|  |             _virtualSkeleton.transform.position = rightPosition; | ||||||
|  |             _virtualSkeleton.transform.rotation = Quaternion.FromToRotation(Vector3.up, rightRotation); | ||||||
|  |             _virtualSkeleton.transform.localScale = new Vector3(lThickness, lThickness, lThickness); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								Assets/Models/VirtualSkeleton.cs.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Assets/Models/VirtualSkeleton.cs.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 5f725336fc6a4481a4c7d74ec0e3b17b | ||||||
|  | timeCreated: 1677413910 | ||||||
							
								
								
									
										441
									
								
								Assets/Scenes/BallHumanScene.unity
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										441
									
								
								Assets/Scenes/BallHumanScene.unity
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,441 @@ | |||||||
|  | %YAML 1.1 | ||||||
|  | %TAG !u! tag:unity3d.com,2011: | ||||||
|  | --- !u!29 &1 | ||||||
|  | OcclusionCullingSettings: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   m_OcclusionBakeSettings: | ||||||
|  |     smallestOccluder: 5 | ||||||
|  |     smallestHole: 0.25 | ||||||
|  |     backfaceThreshold: 100 | ||||||
|  |   m_SceneGUID: 00000000000000000000000000000000 | ||||||
|  |   m_OcclusionCullingData: {fileID: 0} | ||||||
|  | --- !u!104 &2 | ||||||
|  | RenderSettings: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   serializedVersion: 9 | ||||||
|  |   m_Fog: 0 | ||||||
|  |   m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} | ||||||
|  |   m_FogMode: 3 | ||||||
|  |   m_FogDensity: 0.01 | ||||||
|  |   m_LinearFogStart: 0 | ||||||
|  |   m_LinearFogEnd: 300 | ||||||
|  |   m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} | ||||||
|  |   m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} | ||||||
|  |   m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} | ||||||
|  |   m_AmbientIntensity: 1 | ||||||
|  |   m_AmbientMode: 0 | ||||||
|  |   m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} | ||||||
|  |   m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} | ||||||
|  |   m_HaloStrength: 0.5 | ||||||
|  |   m_FlareStrength: 1 | ||||||
|  |   m_FlareFadeSpeed: 3 | ||||||
|  |   m_HaloTexture: {fileID: 0} | ||||||
|  |   m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} | ||||||
|  |   m_DefaultReflectionMode: 0 | ||||||
|  |   m_DefaultReflectionResolution: 128 | ||||||
|  |   m_ReflectionBounces: 1 | ||||||
|  |   m_ReflectionIntensity: 1 | ||||||
|  |   m_CustomReflection: {fileID: 0} | ||||||
|  |   m_Sun: {fileID: 0} | ||||||
|  |   m_IndirectSpecularColor: {r: 0.18029127, g: 0.22572401, b: 0.3069303, a: 1} | ||||||
|  |   m_UseRadianceAmbientProbe: 0 | ||||||
|  | --- !u!157 &3 | ||||||
|  | LightmapSettings: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   serializedVersion: 12 | ||||||
|  |   m_GIWorkflowMode: 1 | ||||||
|  |   m_GISettings: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     m_BounceScale: 1 | ||||||
|  |     m_IndirectOutputScale: 1 | ||||||
|  |     m_AlbedoBoost: 1 | ||||||
|  |     m_EnvironmentLightingMode: 0 | ||||||
|  |     m_EnableBakedLightmaps: 1 | ||||||
|  |     m_EnableRealtimeLightmaps: 0 | ||||||
|  |   m_LightmapEditorSettings: | ||||||
|  |     serializedVersion: 12 | ||||||
|  |     m_Resolution: 2 | ||||||
|  |     m_BakeResolution: 40 | ||||||
|  |     m_AtlasSize: 1024 | ||||||
|  |     m_AO: 0 | ||||||
|  |     m_AOMaxDistance: 1 | ||||||
|  |     m_CompAOExponent: 1 | ||||||
|  |     m_CompAOExponentDirect: 0 | ||||||
|  |     m_ExtractAmbientOcclusion: 0 | ||||||
|  |     m_Padding: 2 | ||||||
|  |     m_LightmapParameters: {fileID: 0} | ||||||
|  |     m_LightmapsBakeMode: 1 | ||||||
|  |     m_TextureCompression: 1 | ||||||
|  |     m_FinalGather: 0 | ||||||
|  |     m_FinalGatherFiltering: 1 | ||||||
|  |     m_FinalGatherRayCount: 256 | ||||||
|  |     m_ReflectionCompression: 2 | ||||||
|  |     m_MixedBakeMode: 2 | ||||||
|  |     m_BakeBackend: 1 | ||||||
|  |     m_PVRSampling: 1 | ||||||
|  |     m_PVRDirectSampleCount: 32 | ||||||
|  |     m_PVRSampleCount: 512 | ||||||
|  |     m_PVRBounces: 2 | ||||||
|  |     m_PVREnvironmentSampleCount: 256 | ||||||
|  |     m_PVREnvironmentReferencePointCount: 2048 | ||||||
|  |     m_PVRFilteringMode: 1 | ||||||
|  |     m_PVRDenoiserTypeDirect: 1 | ||||||
|  |     m_PVRDenoiserTypeIndirect: 1 | ||||||
|  |     m_PVRDenoiserTypeAO: 1 | ||||||
|  |     m_PVRFilterTypeDirect: 0 | ||||||
|  |     m_PVRFilterTypeIndirect: 0 | ||||||
|  |     m_PVRFilterTypeAO: 0 | ||||||
|  |     m_PVREnvironmentMIS: 1 | ||||||
|  |     m_PVRCulling: 1 | ||||||
|  |     m_PVRFilteringGaussRadiusDirect: 1 | ||||||
|  |     m_PVRFilteringGaussRadiusIndirect: 5 | ||||||
|  |     m_PVRFilteringGaussRadiusAO: 2 | ||||||
|  |     m_PVRFilteringAtrousPositionSigmaDirect: 0.5 | ||||||
|  |     m_PVRFilteringAtrousPositionSigmaIndirect: 2 | ||||||
|  |     m_PVRFilteringAtrousPositionSigmaAO: 1 | ||||||
|  |     m_ExportTrainingData: 0 | ||||||
|  |     m_TrainingDataDestination: TrainingData | ||||||
|  |     m_LightProbeSampleCountMultiplier: 4 | ||||||
|  |   m_LightingDataAsset: {fileID: 0} | ||||||
|  |   m_LightingSettings: {fileID: 0} | ||||||
|  | --- !u!196 &4 | ||||||
|  | NavMeshSettings: | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_BuildSettings: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     agentTypeID: 0 | ||||||
|  |     agentRadius: 0.5 | ||||||
|  |     agentHeight: 2 | ||||||
|  |     agentSlope: 45 | ||||||
|  |     agentClimb: 0.4 | ||||||
|  |     ledgeDropHeight: 0 | ||||||
|  |     maxJumpAcrossDistance: 0 | ||||||
|  |     minRegionArea: 2 | ||||||
|  |     manualCellSize: 0 | ||||||
|  |     cellSize: 0.16666667 | ||||||
|  |     manualTileSize: 0 | ||||||
|  |     tileSize: 256 | ||||||
|  |     accuratePlacement: 0 | ||||||
|  |     maxJobWorkers: 0 | ||||||
|  |     preserveTilesOutsideBounds: 0 | ||||||
|  |     debug: | ||||||
|  |       m_Flags: 0 | ||||||
|  |   m_NavMeshData: {fileID: 0} | ||||||
|  | --- !u!1 &306285767 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 306285770} | ||||||
|  |   - component: {fileID: 306285769} | ||||||
|  |   - component: {fileID: 306285768} | ||||||
|  |   m_Layer: 0 | ||||||
|  |   m_Name: Camera | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!81 &306285768 | ||||||
|  | AudioListener: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 306285767} | ||||||
|  |   m_Enabled: 1 | ||||||
|  | --- !u!20 &306285769 | ||||||
|  | Camera: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 306285767} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   m_ClearFlags: 1 | ||||||
|  |   m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} | ||||||
|  |   m_projectionMatrixMode: 1 | ||||||
|  |   m_GateFitMode: 2 | ||||||
|  |   m_FOVAxisMode: 0 | ||||||
|  |   m_SensorSize: {x: 36, y: 24} | ||||||
|  |   m_LensShift: {x: 0, y: 0} | ||||||
|  |   m_FocalLength: 50 | ||||||
|  |   m_NormalizedViewPortRect: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     x: 0 | ||||||
|  |     y: 0 | ||||||
|  |     width: 1 | ||||||
|  |     height: 1 | ||||||
|  |   near clip plane: 0.3 | ||||||
|  |   far clip plane: 1000 | ||||||
|  |   field of view: 60 | ||||||
|  |   orthographic: 0 | ||||||
|  |   orthographic size: 5 | ||||||
|  |   m_Depth: 0 | ||||||
|  |   m_CullingMask: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     m_Bits: 4294967295 | ||||||
|  |   m_RenderingPath: -1 | ||||||
|  |   m_TargetTexture: {fileID: 0} | ||||||
|  |   m_TargetDisplay: 0 | ||||||
|  |   m_TargetEye: 3 | ||||||
|  |   m_HDR: 1 | ||||||
|  |   m_AllowMSAA: 1 | ||||||
|  |   m_AllowDynamicResolution: 0 | ||||||
|  |   m_ForceIntoRT: 0 | ||||||
|  |   m_OcclusionCulling: 1 | ||||||
|  |   m_StereoConvergence: 10 | ||||||
|  |   m_StereoSeparation: 0.022 | ||||||
|  | --- !u!4 &306285770 | ||||||
|  | Transform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 306285767} | ||||||
|  |   m_LocalRotation: {x: 0.0016336598, y: 0.99834925, z: 0.037567556, w: -0.043414135} | ||||||
|  |   m_LocalPosition: {x: -1.83, y: 6.98, z: 16.38} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_ConstrainProportionsScale: 0 | ||||||
|  |   m_Children: [] | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 2 | ||||||
|  |   m_LocalEulerAnglesHint: {x: -4.31, y: 184.98, z: 0} | ||||||
|  | --- !u!1001 &670355942 | ||||||
|  | PrefabInstance: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   m_Modification: | ||||||
|  |     m_TransformParent: {fileID: 0} | ||||||
|  |     m_Modifications: | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_RootOrder | ||||||
|  |       value: 1 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.x | ||||||
|  |       value: -0.93436813 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.y | ||||||
|  |       value: 0.81755877 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.z | ||||||
|  |       value: -0.6021528 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.w | ||||||
|  |       value: 1 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.z | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.z | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 919132149155446097, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_Name | ||||||
|  |       value: troop | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5465940246521907071, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5465940246521907071, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.w | ||||||
|  |       value: 0.8707891 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5465940246521907071, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.x | ||||||
|  |       value: -0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5465940246521907071, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.y | ||||||
|  |       value: -0.49165684 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5465940246521907071, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.y | ||||||
|  |       value: -58.899 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 5866666021909216657, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_Controller | ||||||
|  |       value:  | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 6502182839619065283, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.x | ||||||
|  |       value: -0.000114262104 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 6502182839619065283, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.y | ||||||
|  |       value: 1.8739636 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 6502182839619065283, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.z | ||||||
|  |       value: -0.00004636313 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 6502182839619065283, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.w | ||||||
|  |       value: 0.9621656 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 6502182839619065283, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.x | ||||||
|  |       value: 0.023309091 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 6502182839619065283, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.y | ||||||
|  |       value: -0.26867148 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 6502182839619065283, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.z | ||||||
|  |       value: -0.03885668 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 6502182839619065283, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.x | ||||||
|  |       value: 1.374 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 6502182839619065283, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.y | ||||||
|  |       value: -31.263 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 6502182839619065283, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.z | ||||||
|  |       value: -5.01 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     m_RemovedComponents: [] | ||||||
|  |   m_SourcePrefab: {fileID: 100100000, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  | --- !u!1 &670355943 stripped | ||||||
|  | GameObject: | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |   m_PrefabInstance: {fileID: 670355942} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  | --- !u!114 &670355944 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 670355943} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: a2b060336532a01bfb4593b385955175, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  | --- !u!1 &1059201228 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 1059201230} | ||||||
|  |   - component: {fileID: 1059201229} | ||||||
|  |   m_Layer: 0 | ||||||
|  |   m_Name: Directional Light | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!108 &1059201229 | ||||||
|  | Light: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 1059201228} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   serializedVersion: 10 | ||||||
|  |   m_Type: 1 | ||||||
|  |   m_Shape: 0 | ||||||
|  |   m_Color: {r: 1, g: 1, b: 1, a: 1} | ||||||
|  |   m_Intensity: 1 | ||||||
|  |   m_Range: 10 | ||||||
|  |   m_SpotAngle: 30 | ||||||
|  |   m_InnerSpotAngle: 21.80208 | ||||||
|  |   m_CookieSize: 10 | ||||||
|  |   m_Shadows: | ||||||
|  |     m_Type: 0 | ||||||
|  |     m_Resolution: -1 | ||||||
|  |     m_CustomResolution: -1 | ||||||
|  |     m_Strength: 1 | ||||||
|  |     m_Bias: 0.05 | ||||||
|  |     m_NormalBias: 0.4 | ||||||
|  |     m_NearPlane: 0.2 | ||||||
|  |     m_CullingMatrixOverride: | ||||||
|  |       e00: 1 | ||||||
|  |       e01: 0 | ||||||
|  |       e02: 0 | ||||||
|  |       e03: 0 | ||||||
|  |       e10: 0 | ||||||
|  |       e11: 1 | ||||||
|  |       e12: 0 | ||||||
|  |       e13: 0 | ||||||
|  |       e20: 0 | ||||||
|  |       e21: 0 | ||||||
|  |       e22: 1 | ||||||
|  |       e23: 0 | ||||||
|  |       e30: 0 | ||||||
|  |       e31: 0 | ||||||
|  |       e32: 0 | ||||||
|  |       e33: 1 | ||||||
|  |     m_UseCullingMatrixOverride: 0 | ||||||
|  |   m_Cookie: {fileID: 0} | ||||||
|  |   m_DrawHalo: 0 | ||||||
|  |   m_Flare: {fileID: 0} | ||||||
|  |   m_RenderMode: 0 | ||||||
|  |   m_CullingMask: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     m_Bits: 4294967295 | ||||||
|  |   m_RenderingLayerMask: 1 | ||||||
|  |   m_Lightmapping: 4 | ||||||
|  |   m_LightShadowCasterMode: 0 | ||||||
|  |   m_AreaSize: {x: 1, y: 1} | ||||||
|  |   m_BounceIntensity: 1 | ||||||
|  |   m_ColorTemperature: 6570 | ||||||
|  |   m_UseColorTemperature: 0 | ||||||
|  |   m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} | ||||||
|  |   m_UseBoundingSphereOverride: 0 | ||||||
|  |   m_UseViewFrustumForShadowCasterCull: 1 | ||||||
|  |   m_ShadowRadius: 0 | ||||||
|  |   m_ShadowAngle: 0 | ||||||
|  | --- !u!4 &1059201230 | ||||||
|  | Transform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 1059201228} | ||||||
|  |   m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} | ||||||
|  |   m_LocalPosition: {x: 7.33, y: 1.28, z: -4.76} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_ConstrainProportionsScale: 0 | ||||||
|  |   m_Children: [] | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} | ||||||
							
								
								
									
										7
									
								
								Assets/Scenes/BallHumanScene.unity.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Assets/Scenes/BallHumanScene.unity.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: aa15f758637754fa394d6979dab2c3fa | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
							
								
								
									
										459
									
								
								Assets/Scenes/BallScene.unity
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										459
									
								
								Assets/Scenes/BallScene.unity
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,459 @@ | |||||||
|  | %YAML 1.1 | ||||||
|  | %TAG !u! tag:unity3d.com,2011: | ||||||
|  | --- !u!29 &1 | ||||||
|  | OcclusionCullingSettings: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   m_OcclusionBakeSettings: | ||||||
|  |     smallestOccluder: 5 | ||||||
|  |     smallestHole: 0.25 | ||||||
|  |     backfaceThreshold: 100 | ||||||
|  |   m_SceneGUID: 00000000000000000000000000000000 | ||||||
|  |   m_OcclusionCullingData: {fileID: 0} | ||||||
|  | --- !u!104 &2 | ||||||
|  | RenderSettings: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   serializedVersion: 9 | ||||||
|  |   m_Fog: 0 | ||||||
|  |   m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} | ||||||
|  |   m_FogMode: 3 | ||||||
|  |   m_FogDensity: 0.01 | ||||||
|  |   m_LinearFogStart: 0 | ||||||
|  |   m_LinearFogEnd: 300 | ||||||
|  |   m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} | ||||||
|  |   m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} | ||||||
|  |   m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} | ||||||
|  |   m_AmbientIntensity: 1 | ||||||
|  |   m_AmbientMode: 0 | ||||||
|  |   m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} | ||||||
|  |   m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} | ||||||
|  |   m_HaloStrength: 0.5 | ||||||
|  |   m_FlareStrength: 1 | ||||||
|  |   m_FlareFadeSpeed: 3 | ||||||
|  |   m_HaloTexture: {fileID: 0} | ||||||
|  |   m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} | ||||||
|  |   m_DefaultReflectionMode: 0 | ||||||
|  |   m_DefaultReflectionResolution: 128 | ||||||
|  |   m_ReflectionBounces: 1 | ||||||
|  |   m_ReflectionIntensity: 1 | ||||||
|  |   m_CustomReflection: {fileID: 0} | ||||||
|  |   m_Sun: {fileID: 0} | ||||||
|  |   m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} | ||||||
|  |   m_UseRadianceAmbientProbe: 0 | ||||||
|  | --- !u!157 &3 | ||||||
|  | LightmapSettings: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   serializedVersion: 12 | ||||||
|  |   m_GIWorkflowMode: 1 | ||||||
|  |   m_GISettings: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     m_BounceScale: 1 | ||||||
|  |     m_IndirectOutputScale: 1 | ||||||
|  |     m_AlbedoBoost: 1 | ||||||
|  |     m_EnvironmentLightingMode: 0 | ||||||
|  |     m_EnableBakedLightmaps: 1 | ||||||
|  |     m_EnableRealtimeLightmaps: 0 | ||||||
|  |   m_LightmapEditorSettings: | ||||||
|  |     serializedVersion: 12 | ||||||
|  |     m_Resolution: 2 | ||||||
|  |     m_BakeResolution: 40 | ||||||
|  |     m_AtlasSize: 1024 | ||||||
|  |     m_AO: 0 | ||||||
|  |     m_AOMaxDistance: 1 | ||||||
|  |     m_CompAOExponent: 1 | ||||||
|  |     m_CompAOExponentDirect: 0 | ||||||
|  |     m_ExtractAmbientOcclusion: 0 | ||||||
|  |     m_Padding: 2 | ||||||
|  |     m_LightmapParameters: {fileID: 0} | ||||||
|  |     m_LightmapsBakeMode: 1 | ||||||
|  |     m_TextureCompression: 1 | ||||||
|  |     m_FinalGather: 0 | ||||||
|  |     m_FinalGatherFiltering: 1 | ||||||
|  |     m_FinalGatherRayCount: 256 | ||||||
|  |     m_ReflectionCompression: 2 | ||||||
|  |     m_MixedBakeMode: 2 | ||||||
|  |     m_BakeBackend: 1 | ||||||
|  |     m_PVRSampling: 1 | ||||||
|  |     m_PVRDirectSampleCount: 32 | ||||||
|  |     m_PVRSampleCount: 512 | ||||||
|  |     m_PVRBounces: 2 | ||||||
|  |     m_PVREnvironmentSampleCount: 256 | ||||||
|  |     m_PVREnvironmentReferencePointCount: 2048 | ||||||
|  |     m_PVRFilteringMode: 1 | ||||||
|  |     m_PVRDenoiserTypeDirect: 1 | ||||||
|  |     m_PVRDenoiserTypeIndirect: 1 | ||||||
|  |     m_PVRDenoiserTypeAO: 1 | ||||||
|  |     m_PVRFilterTypeDirect: 0 | ||||||
|  |     m_PVRFilterTypeIndirect: 0 | ||||||
|  |     m_PVRFilterTypeAO: 0 | ||||||
|  |     m_PVREnvironmentMIS: 1 | ||||||
|  |     m_PVRCulling: 1 | ||||||
|  |     m_PVRFilteringGaussRadiusDirect: 1 | ||||||
|  |     m_PVRFilteringGaussRadiusIndirect: 5 | ||||||
|  |     m_PVRFilteringGaussRadiusAO: 2 | ||||||
|  |     m_PVRFilteringAtrousPositionSigmaDirect: 0.5 | ||||||
|  |     m_PVRFilteringAtrousPositionSigmaIndirect: 2 | ||||||
|  |     m_PVRFilteringAtrousPositionSigmaAO: 1 | ||||||
|  |     m_ExportTrainingData: 0 | ||||||
|  |     m_TrainingDataDestination: TrainingData | ||||||
|  |     m_LightProbeSampleCountMultiplier: 4 | ||||||
|  |   m_LightingDataAsset: {fileID: 0} | ||||||
|  |   m_LightingSettings: {fileID: 0} | ||||||
|  | --- !u!196 &4 | ||||||
|  | NavMeshSettings: | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_BuildSettings: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     agentTypeID: 0 | ||||||
|  |     agentRadius: 0.5 | ||||||
|  |     agentHeight: 2 | ||||||
|  |     agentSlope: 45 | ||||||
|  |     agentClimb: 0.4 | ||||||
|  |     ledgeDropHeight: 0 | ||||||
|  |     maxJumpAcrossDistance: 0 | ||||||
|  |     minRegionArea: 2 | ||||||
|  |     manualCellSize: 0 | ||||||
|  |     cellSize: 0.16666667 | ||||||
|  |     manualTileSize: 0 | ||||||
|  |     tileSize: 256 | ||||||
|  |     accuratePlacement: 0 | ||||||
|  |     maxJobWorkers: 0 | ||||||
|  |     preserveTilesOutsideBounds: 0 | ||||||
|  |     debug: | ||||||
|  |       m_Flags: 0 | ||||||
|  |   m_NavMeshData: {fileID: 0} | ||||||
|  | --- !u!1 &99618223 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 99618227} | ||||||
|  |   - component: {fileID: 99618226} | ||||||
|  |   - component: {fileID: 99618225} | ||||||
|  |   - component: {fileID: 99618224} | ||||||
|  |   m_Layer: 0 | ||||||
|  |   m_Name: Plane | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!64 &99618224 | ||||||
|  | MeshCollider: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 99618223} | ||||||
|  |   m_Material: {fileID: 0} | ||||||
|  |   m_IsTrigger: 0 | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   serializedVersion: 4 | ||||||
|  |   m_Convex: 0 | ||||||
|  |   m_CookingOptions: 30 | ||||||
|  |   m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} | ||||||
|  | --- !u!23 &99618225 | ||||||
|  | MeshRenderer: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 99618223} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_CastShadows: 1 | ||||||
|  |   m_ReceiveShadows: 1 | ||||||
|  |   m_DynamicOccludee: 1 | ||||||
|  |   m_StaticShadowCaster: 0 | ||||||
|  |   m_MotionVectors: 1 | ||||||
|  |   m_LightProbeUsage: 1 | ||||||
|  |   m_ReflectionProbeUsage: 1 | ||||||
|  |   m_RayTracingMode: 2 | ||||||
|  |   m_RayTraceProcedural: 0 | ||||||
|  |   m_RenderingLayerMask: 1 | ||||||
|  |   m_RendererPriority: 0 | ||||||
|  |   m_Materials: | ||||||
|  |   - {fileID: 2100000, guid: 6083fe04391087ca294999838984a59c, type: 2} | ||||||
|  |   m_StaticBatchInfo: | ||||||
|  |     firstSubMesh: 0 | ||||||
|  |     subMeshCount: 0 | ||||||
|  |   m_StaticBatchRoot: {fileID: 0} | ||||||
|  |   m_ProbeAnchor: {fileID: 0} | ||||||
|  |   m_LightProbeVolumeOverride: {fileID: 0} | ||||||
|  |   m_ScaleInLightmap: 1 | ||||||
|  |   m_ReceiveGI: 1 | ||||||
|  |   m_PreserveUVs: 0 | ||||||
|  |   m_IgnoreNormalsForChartDetection: 0 | ||||||
|  |   m_ImportantGI: 0 | ||||||
|  |   m_StitchLightmapSeams: 1 | ||||||
|  |   m_SelectedEditorRenderState: 3 | ||||||
|  |   m_MinimumChartSize: 4 | ||||||
|  |   m_AutoUVMaxDistance: 0.5 | ||||||
|  |   m_AutoUVMaxAngle: 89 | ||||||
|  |   m_LightmapParameters: {fileID: 0} | ||||||
|  |   m_SortingLayerID: 0 | ||||||
|  |   m_SortingLayer: 0 | ||||||
|  |   m_SortingOrder: 0 | ||||||
|  |   m_AdditionalVertexStreams: {fileID: 0} | ||||||
|  | --- !u!33 &99618226 | ||||||
|  | MeshFilter: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 99618223} | ||||||
|  |   m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} | ||||||
|  | --- !u!4 &99618227 | ||||||
|  | Transform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 99618223} | ||||||
|  |   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_ConstrainProportionsScale: 1 | ||||||
|  |   m_Children: [] | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 3 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  | --- !u!1 &182244630 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 182244631} | ||||||
|  |   - component: {fileID: 182244632} | ||||||
|  |   m_Layer: 0 | ||||||
|  |   m_Name: GameObject | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!4 &182244631 | ||||||
|  | Transform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 182244630} | ||||||
|  |   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_ConstrainProportionsScale: 0 | ||||||
|  |   m_Children: [] | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 2 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  | --- !u!114 &182244632 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 182244630} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: 574a3724e040787f7afd9341fba89cf2, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  | --- !u!1 &443683957 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 443683959} | ||||||
|  |   - component: {fileID: 443683958} | ||||||
|  |   m_Layer: 0 | ||||||
|  |   m_Name: Directional Light | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!108 &443683958 | ||||||
|  | Light: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 443683957} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   serializedVersion: 10 | ||||||
|  |   m_Type: 1 | ||||||
|  |   m_Shape: 0 | ||||||
|  |   m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} | ||||||
|  |   m_Intensity: 1 | ||||||
|  |   m_Range: 10 | ||||||
|  |   m_SpotAngle: 30 | ||||||
|  |   m_InnerSpotAngle: 21.80208 | ||||||
|  |   m_CookieSize: 10 | ||||||
|  |   m_Shadows: | ||||||
|  |     m_Type: 2 | ||||||
|  |     m_Resolution: -1 | ||||||
|  |     m_CustomResolution: -1 | ||||||
|  |     m_Strength: 1 | ||||||
|  |     m_Bias: 0.05 | ||||||
|  |     m_NormalBias: 0.4 | ||||||
|  |     m_NearPlane: 0.2 | ||||||
|  |     m_CullingMatrixOverride: | ||||||
|  |       e00: 1 | ||||||
|  |       e01: 0 | ||||||
|  |       e02: 0 | ||||||
|  |       e03: 0 | ||||||
|  |       e10: 0 | ||||||
|  |       e11: 1 | ||||||
|  |       e12: 0 | ||||||
|  |       e13: 0 | ||||||
|  |       e20: 0 | ||||||
|  |       e21: 0 | ||||||
|  |       e22: 1 | ||||||
|  |       e23: 0 | ||||||
|  |       e30: 0 | ||||||
|  |       e31: 0 | ||||||
|  |       e32: 0 | ||||||
|  |       e33: 1 | ||||||
|  |     m_UseCullingMatrixOverride: 0 | ||||||
|  |   m_Cookie: {fileID: 0} | ||||||
|  |   m_DrawHalo: 0 | ||||||
|  |   m_Flare: {fileID: 0} | ||||||
|  |   m_RenderMode: 0 | ||||||
|  |   m_CullingMask: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     m_Bits: 4294967295 | ||||||
|  |   m_RenderingLayerMask: 1 | ||||||
|  |   m_Lightmapping: 4 | ||||||
|  |   m_LightShadowCasterMode: 0 | ||||||
|  |   m_AreaSize: {x: 1, y: 1} | ||||||
|  |   m_BounceIntensity: 1 | ||||||
|  |   m_ColorTemperature: 6570 | ||||||
|  |   m_UseColorTemperature: 0 | ||||||
|  |   m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} | ||||||
|  |   m_UseBoundingSphereOverride: 0 | ||||||
|  |   m_UseViewFrustumForShadowCasterCull: 1 | ||||||
|  |   m_ShadowRadius: 0 | ||||||
|  |   m_ShadowAngle: 0 | ||||||
|  | --- !u!4 &443683959 | ||||||
|  | Transform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 443683957} | ||||||
|  |   m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} | ||||||
|  |   m_LocalPosition: {x: 0, y: 3, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_ConstrainProportionsScale: 0 | ||||||
|  |   m_Children: [] | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 1 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} | ||||||
|  | --- !u!1 &2045151417 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 2045151420} | ||||||
|  |   - component: {fileID: 2045151419} | ||||||
|  |   - component: {fileID: 2045151418} | ||||||
|  |   - component: {fileID: 2045151421} | ||||||
|  |   m_Layer: 0 | ||||||
|  |   m_Name: Main Camera | ||||||
|  |   m_TagString: MainCamera | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!81 &2045151418 | ||||||
|  | AudioListener: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 2045151417} | ||||||
|  |   m_Enabled: 1 | ||||||
|  | --- !u!20 &2045151419 | ||||||
|  | Camera: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 2045151417} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   m_ClearFlags: 1 | ||||||
|  |   m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} | ||||||
|  |   m_projectionMatrixMode: 1 | ||||||
|  |   m_GateFitMode: 2 | ||||||
|  |   m_FOVAxisMode: 0 | ||||||
|  |   m_SensorSize: {x: 36, y: 24} | ||||||
|  |   m_LensShift: {x: 0, y: 0} | ||||||
|  |   m_FocalLength: 50 | ||||||
|  |   m_NormalizedViewPortRect: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     x: 0 | ||||||
|  |     y: 0 | ||||||
|  |     width: 1 | ||||||
|  |     height: 1 | ||||||
|  |   near clip plane: 0.3 | ||||||
|  |   far clip plane: 1000 | ||||||
|  |   field of view: 60 | ||||||
|  |   orthographic: 0 | ||||||
|  |   orthographic size: 5 | ||||||
|  |   m_Depth: -1 | ||||||
|  |   m_CullingMask: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     m_Bits: 4294967295 | ||||||
|  |   m_RenderingPath: -1 | ||||||
|  |   m_TargetTexture: {fileID: 0} | ||||||
|  |   m_TargetDisplay: 0 | ||||||
|  |   m_TargetEye: 3 | ||||||
|  |   m_HDR: 1 | ||||||
|  |   m_AllowMSAA: 1 | ||||||
|  |   m_AllowDynamicResolution: 0 | ||||||
|  |   m_ForceIntoRT: 0 | ||||||
|  |   m_OcclusionCulling: 1 | ||||||
|  |   m_StereoConvergence: 10 | ||||||
|  |   m_StereoSeparation: 0.022 | ||||||
|  | --- !u!4 &2045151420 | ||||||
|  | Transform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 2045151417} | ||||||
|  |   m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 7} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_ConstrainProportionsScale: 0 | ||||||
|  |   m_Children: [] | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} | ||||||
|  | --- !u!114 &2045151421 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 2045151417} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: 9189b565e8ba9bfc3bdaa38149e3e13f, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   target: {fileID: 182244631} | ||||||
							
								
								
									
										7
									
								
								Assets/Scenes/BallScene.unity.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Assets/Scenes/BallScene.unity.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 53edd235eaf7da249a8204f606eb1489 | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
| @@ -123,117 +123,93 @@ NavMeshSettings: | |||||||
|     debug: |     debug: | ||||||
|       m_Flags: 0 |       m_Flags: 0 | ||||||
|   m_NavMeshData: {fileID: 0} |   m_NavMeshData: {fileID: 0} | ||||||
| --- !u!1 &320693305 | --- !u!1001 &404755305 | ||||||
| GameObject: | PrefabInstance: | ||||||
|   m_ObjectHideFlags: 0 |   m_ObjectHideFlags: 0 | ||||||
|   m_CorrespondingSourceObject: {fileID: 0} |   serializedVersion: 2 | ||||||
|   m_PrefabInstance: {fileID: 0} |   m_Modification: | ||||||
|  |     m_TransformParent: {fileID: 0} | ||||||
|  |     m_Modifications: | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_RootOrder | ||||||
|  |       value: 1 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.x | ||||||
|  |       value: -12.91 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.y | ||||||
|  |       value: -4.98 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.z | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.w | ||||||
|  |       value: 1 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalRotation.z | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.x | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.y | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalEulerAnglesHint.z | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -2845779275431937956, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_IsActive | ||||||
|  |       value: 0 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: -464305122009946348, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_LocalPosition.x | ||||||
|  |       value: -4.32 | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     - target: {fileID: 919132149155446097, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |       propertyPath: m_Name | ||||||
|  |       value: troop | ||||||
|  |       objectReference: {fileID: 0} | ||||||
|  |     m_RemovedComponents: [] | ||||||
|  |   m_SourcePrefab: {fileID: 100100000, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  | --- !u!1 &404755306 stripped | ||||||
|  | GameObject: | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|  |   m_PrefabInstance: {fileID: 404755305} | ||||||
|   m_PrefabAsset: {fileID: 0} |   m_PrefabAsset: {fileID: 0} | ||||||
|   serializedVersion: 6 | --- !u!4 &404755309 stripped | ||||||
|   m_Component: | Transform: | ||||||
|   - component: {fileID: 320693310} |   m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: c5470c9a1aff50643b6a9ff0bab4297d, type: 3} | ||||||
|   - component: {fileID: 320693309} |   m_PrefabInstance: {fileID: 404755305} | ||||||
|   - component: {fileID: 320693308} |   m_PrefabAsset: {fileID: 0} | ||||||
|   - component: {fileID: 320693307} | --- !u!114 &404755310 | ||||||
|   - component: {fileID: 320693306} |  | ||||||
|   m_Layer: 0 |  | ||||||
|   m_Name: Cube |  | ||||||
|   m_TagString: Untagged |  | ||||||
|   m_Icon: {fileID: 0} |  | ||||||
|   m_NavMeshLayer: 0 |  | ||||||
|   m_StaticEditorFlags: 0 |  | ||||||
|   m_IsActive: 1 |  | ||||||
| --- !u!114 &320693306 |  | ||||||
| MonoBehaviour: | MonoBehaviour: | ||||||
|   m_ObjectHideFlags: 0 |   m_ObjectHideFlags: 0 | ||||||
|   m_CorrespondingSourceObject: {fileID: 0} |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|   m_PrefabInstance: {fileID: 0} |   m_PrefabInstance: {fileID: 0} | ||||||
|   m_PrefabAsset: {fileID: 0} |   m_PrefabAsset: {fileID: 0} | ||||||
|   m_GameObject: {fileID: 320693305} |   m_GameObject: {fileID: 404755306} | ||||||
|   m_Enabled: 1 |   m_Enabled: 1 | ||||||
|   m_EditorHideFlags: 0 |   m_EditorHideFlags: 0 | ||||||
|   m_Script: {fileID: 11500000, guid: 11e8a976fe328b1c3bdf9f44ef9f6fa1, type: 3} |   m_Script: {fileID: 11500000, guid: a2b060336532a01bfb4593b385955175, type: 3} | ||||||
|   m_Name:  |   m_Name:  | ||||||
|   m_EditorClassIdentifier:  |   m_EditorClassIdentifier:  | ||||||
|   rotateAmount: {x: 0, y: 1, z: 0} |  | ||||||
| --- !u!65 &320693307 |  | ||||||
| BoxCollider: |  | ||||||
|   m_ObjectHideFlags: 0 |  | ||||||
|   m_CorrespondingSourceObject: {fileID: 0} |  | ||||||
|   m_PrefabInstance: {fileID: 0} |  | ||||||
|   m_PrefabAsset: {fileID: 0} |  | ||||||
|   m_GameObject: {fileID: 320693305} |  | ||||||
|   m_Material: {fileID: 0} |  | ||||||
|   m_IsTrigger: 0 |  | ||||||
|   m_Enabled: 1 |  | ||||||
|   serializedVersion: 2 |  | ||||||
|   m_Size: {x: 1, y: 1, z: 1} |  | ||||||
|   m_Center: {x: 0, y: 0, z: 0} |  | ||||||
| --- !u!23 &320693308 |  | ||||||
| MeshRenderer: |  | ||||||
|   m_ObjectHideFlags: 0 |  | ||||||
|   m_CorrespondingSourceObject: {fileID: 0} |  | ||||||
|   m_PrefabInstance: {fileID: 0} |  | ||||||
|   m_PrefabAsset: {fileID: 0} |  | ||||||
|   m_GameObject: {fileID: 320693305} |  | ||||||
|   m_Enabled: 1 |  | ||||||
|   m_CastShadows: 1 |  | ||||||
|   m_ReceiveShadows: 1 |  | ||||||
|   m_DynamicOccludee: 1 |  | ||||||
|   m_StaticShadowCaster: 0 |  | ||||||
|   m_MotionVectors: 1 |  | ||||||
|   m_LightProbeUsage: 1 |  | ||||||
|   m_ReflectionProbeUsage: 1 |  | ||||||
|   m_RayTracingMode: 2 |  | ||||||
|   m_RayTraceProcedural: 0 |  | ||||||
|   m_RenderingLayerMask: 1 |  | ||||||
|   m_RendererPriority: 0 |  | ||||||
|   m_Materials: |  | ||||||
|   - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} |  | ||||||
|   m_StaticBatchInfo: |  | ||||||
|     firstSubMesh: 0 |  | ||||||
|     subMeshCount: 0 |  | ||||||
|   m_StaticBatchRoot: {fileID: 0} |  | ||||||
|   m_ProbeAnchor: {fileID: 0} |  | ||||||
|   m_LightProbeVolumeOverride: {fileID: 0} |  | ||||||
|   m_ScaleInLightmap: 1 |  | ||||||
|   m_ReceiveGI: 1 |  | ||||||
|   m_PreserveUVs: 0 |  | ||||||
|   m_IgnoreNormalsForChartDetection: 0 |  | ||||||
|   m_ImportantGI: 0 |  | ||||||
|   m_StitchLightmapSeams: 1 |  | ||||||
|   m_SelectedEditorRenderState: 3 |  | ||||||
|   m_MinimumChartSize: 4 |  | ||||||
|   m_AutoUVMaxDistance: 0.5 |  | ||||||
|   m_AutoUVMaxAngle: 89 |  | ||||||
|   m_LightmapParameters: {fileID: 0} |  | ||||||
|   m_SortingLayerID: 0 |  | ||||||
|   m_SortingLayer: 0 |  | ||||||
|   m_SortingOrder: 0 |  | ||||||
|   m_AdditionalVertexStreams: {fileID: 0} |  | ||||||
| --- !u!33 &320693309 |  | ||||||
| MeshFilter: |  | ||||||
|   m_ObjectHideFlags: 0 |  | ||||||
|   m_CorrespondingSourceObject: {fileID: 0} |  | ||||||
|   m_PrefabInstance: {fileID: 0} |  | ||||||
|   m_PrefabAsset: {fileID: 0} |  | ||||||
|   m_GameObject: {fileID: 320693305} |  | ||||||
|   m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} |  | ||||||
| --- !u!4 &320693310 |  | ||||||
| Transform: |  | ||||||
|   m_ObjectHideFlags: 0 |  | ||||||
|   m_CorrespondingSourceObject: {fileID: 0} |  | ||||||
|   m_PrefabInstance: {fileID: 0} |  | ||||||
|   m_PrefabAsset: {fileID: 0} |  | ||||||
|   m_GameObject: {fileID: 320693305} |  | ||||||
|   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |  | ||||||
|   m_LocalPosition: {x: -0.24, y: 1.1, z: -1.8} |  | ||||||
|   m_LocalScale: {x: 1, y: 1, z: 1} |  | ||||||
|   m_ConstrainProportionsScale: 0 |  | ||||||
|   m_Children: [] |  | ||||||
|   m_Father: {fileID: 0} |  | ||||||
|   m_RootOrder: 2 |  | ||||||
|   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |  | ||||||
| --- !u!1 &705507993 | --- !u!1 &705507993 | ||||||
| GameObject: | GameObject: | ||||||
|   m_ObjectHideFlags: 0 |   m_ObjectHideFlags: 0 | ||||||
| @@ -326,7 +302,7 @@ Transform: | |||||||
|   m_ConstrainProportionsScale: 0 |   m_ConstrainProportionsScale: 0 | ||||||
|   m_Children: [] |   m_Children: [] | ||||||
|   m_Father: {fileID: 0} |   m_Father: {fileID: 0} | ||||||
|   m_RootOrder: 1 |   m_RootOrder: 2 | ||||||
|   m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} |   m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} | ||||||
| --- !u!1 &963194225 | --- !u!1 &963194225 | ||||||
| GameObject: | GameObject: | ||||||
| @@ -405,14 +381,14 @@ Transform: | |||||||
|   m_PrefabInstance: {fileID: 0} |   m_PrefabInstance: {fileID: 0} | ||||||
|   m_PrefabAsset: {fileID: 0} |   m_PrefabAsset: {fileID: 0} | ||||||
|   m_GameObject: {fileID: 963194225} |   m_GameObject: {fileID: 963194225} | ||||||
|   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |   m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} | ||||||
|   m_LocalPosition: {x: -0.3, y: 1.06, z: -8.26} |   m_LocalPosition: {x: 0, y: 7, z: 15} | ||||||
|   m_LocalScale: {x: 1, y: 1, z: 1} |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|   m_ConstrainProportionsScale: 0 |   m_ConstrainProportionsScale: 0 | ||||||
|   m_Children: [] |   m_Children: [] | ||||||
|   m_Father: {fileID: 0} |   m_Father: {fileID: 0} | ||||||
|   m_RootOrder: 0 |   m_RootOrder: 0 | ||||||
|   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |   m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} | ||||||
| --- !u!114 &963194229 | --- !u!114 &963194229 | ||||||
| MonoBehaviour: | MonoBehaviour: | ||||||
|   m_ObjectHideFlags: 0 |   m_ObjectHideFlags: 0 | ||||||
| @@ -420,12 +396,12 @@ MonoBehaviour: | |||||||
|   m_PrefabInstance: {fileID: 0} |   m_PrefabInstance: {fileID: 0} | ||||||
|   m_PrefabAsset: {fileID: 0} |   m_PrefabAsset: {fileID: 0} | ||||||
|   m_GameObject: {fileID: 963194225} |   m_GameObject: {fileID: 963194225} | ||||||
|   m_Enabled: 1 |   m_Enabled: 0 | ||||||
|   m_EditorHideFlags: 0 |   m_EditorHideFlags: 0 | ||||||
|   m_Script: {fileID: 11500000, guid: 9189b565e8ba9bfc3bdaa38149e3e13f, type: 3} |   m_Script: {fileID: 11500000, guid: 9189b565e8ba9bfc3bdaa38149e3e13f, type: 3} | ||||||
|   m_Name:  |   m_Name:  | ||||||
|   m_EditorClassIdentifier:  |   m_EditorClassIdentifier:  | ||||||
|   target: {fileID: 320693310} |   target: {fileID: 404755309} | ||||||
| --- !u!1 &1880773849 | --- !u!1 &1880773849 | ||||||
| GameObject: | GameObject: | ||||||
|   m_ObjectHideFlags: 0 |   m_ObjectHideFlags: 0 | ||||||
|   | |||||||
							
								
								
									
										23
									
								
								Assets/Utils/IPoseTransformHandler.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								Assets/Utils/IPoseTransformHandler.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | using Models; | ||||||
|  | using UnityEngine; | ||||||
|  | 
 | ||||||
|  | namespace Utils | ||||||
|  | { | ||||||
|  |     /// <summary> | ||||||
|  |     /// 坐标处理接口 | ||||||
|  |     /// </summary> | ||||||
|  |     public interface IPoseTransformHandler | ||||||
|  |     { | ||||||
|  |         /// <summary> | ||||||
|  |         /// 传入新收到的坐标点 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="landmark"></param> | ||||||
|  |         public void ReceivePoseLandmark(PoseLandmark landmark); | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 获得处理之后的坐标点 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <returns></returns> | ||||||
|  |         public Vector3 GetResultPosition(); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								Assets/Utils/IPoseTransformHandler.cs.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Assets/Utils/IPoseTransformHandler.cs.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 09e98a9502f0470f827a472058068bc4 | ||||||
|  | timeCreated: 1677676325 | ||||||
							
								
								
									
										3
									
								
								Assets/Utils/PoseTransformHandlers.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Assets/Utils/PoseTransformHandlers.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 790fe29ab090465183945d02718de6a9 | ||||||
|  | timeCreated: 1677676888 | ||||||
							
								
								
									
										41
									
								
								Assets/Utils/PoseTransformHandlers/AverageHandler.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								Assets/Utils/PoseTransformHandlers/AverageHandler.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | |||||||
|  | using Models; | ||||||
|  | using UnityEngine; | ||||||
|  | using System.Collections.Concurrent; | ||||||
|  | 
 | ||||||
|  | namespace Utils.PoseTransformHandlers | ||||||
|  | { | ||||||
|  |     public class AverageHandler : IPoseTransformHandler | ||||||
|  |     { | ||||||
|  |         public static int AverageLength = 3; | ||||||
|  |         // 线程安全的队列集合 | ||||||
|  |         // 据文档描述甚至没有使用锁 | ||||||
|  |         private readonly ConcurrentQueue<PoseLandmark> _queue = new ConcurrentQueue<PoseLandmark>(); | ||||||
|  |          | ||||||
|  |         public void ReceivePoseLandmark(PoseLandmark landmark) | ||||||
|  |         { | ||||||
|  |             if (_queue.Count < AverageLength) | ||||||
|  |             { | ||||||
|  |                 _queue.Enqueue(landmark); | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 if (_queue.TryDequeue(out _)) | ||||||
|  |                 { | ||||||
|  |                     _queue.Enqueue(landmark); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Vector3 GetResultPosition() | ||||||
|  |         { | ||||||
|  |             var sum = new Vector3(); | ||||||
|  | 
 | ||||||
|  |             foreach (var item in _queue) | ||||||
|  |             { | ||||||
|  |                 sum += new Vector3(item.X, item.Y, item.Z); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             return sum / AverageLength; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,3 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: c02b0d03301d408faf81931a69679f5c | ||||||
|  | timeCreated: 1677676898 | ||||||
							
								
								
									
										20
									
								
								Assets/Utils/PoseTransformHandlers/NormalHandler.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Assets/Utils/PoseTransformHandlers/NormalHandler.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | using Models; | ||||||
|  | using UnityEngine; | ||||||
|  | 
 | ||||||
|  | namespace Utils.PoseTransformHandlers | ||||||
|  | { | ||||||
|  |     public class NormalHandler : IPoseTransformHandler | ||||||
|  |     { | ||||||
|  |         private Vector3 _result; | ||||||
|  |          | ||||||
|  |         public void ReceivePoseLandmark(PoseLandmark landmark) | ||||||
|  |         { | ||||||
|  |             _result = new Vector3(landmark.X, landmark.Y, landmark.Z); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Vector3 GetResultPosition() | ||||||
|  |         { | ||||||
|  |             return _result; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								Assets/Utils/PoseTransformHandlers/NormalHandler.cs.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Assets/Utils/PoseTransformHandlers/NormalHandler.cs.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 93a33f47f3654fd3b27dd18db88fcc55 | ||||||
|  | timeCreated: 1677678654 | ||||||
							
								
								
									
										21
									
								
								Assets/Utils/PoseTransformHandlers/ZAxisHandler.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								Assets/Utils/PoseTransformHandlers/ZAxisHandler.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | using Models; | ||||||
|  | using UnityEngine; | ||||||
|  | 
 | ||||||
|  | namespace Utils.PoseTransformHandlers | ||||||
|  | { | ||||||
|  |     public class ZAxisHandler : IPoseTransformHandler | ||||||
|  |     { | ||||||
|  |         private Vector3 _result; | ||||||
|  |          | ||||||
|  |         public void ReceivePoseLandmark(PoseLandmark landmark) | ||||||
|  |         { | ||||||
|  |             _result = new Vector3(landmark.X, landmark.Y, landmark.Z * 0.2f); | ||||||
|  |             _result = _result * -1; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Vector3 GetResultPosition() | ||||||
|  |         { | ||||||
|  |             return _result; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								Assets/Utils/PoseTransformHandlers/ZAxisHandler.cs.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Assets/Utils/PoseTransformHandlers/ZAxisHandler.cs.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 12369669a7fc44eaae881f89678649b1 | ||||||
|  | timeCreated: 1678024599 | ||||||
							
								
								
									
										67
									
								
								Assets/Utils/RotateUtils.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								Assets/Utils/RotateUtils.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,67 @@ | |||||||
|  | using System; | ||||||
|  | using UnityEngine; | ||||||
|  | 
 | ||||||
|  | namespace Utils | ||||||
|  | { | ||||||
|  |     /// <summary> | ||||||
|  |     /// 旋转工具类 | ||||||
|  |     /// </summary> | ||||||
|  |     public static class RotateUtils | ||||||
|  |     { | ||||||
|  |         private static Matrix4x4 _matrix; | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 获得绕X轴旋转矩阵 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="degree">旋转的角度</param> | ||||||
|  |         /// <returns></returns> | ||||||
|  |         public static Matrix4x4 RotateAxisX(float degree) | ||||||
|  |         { | ||||||
|  |             var sin = MathF.Sin(degree); | ||||||
|  |             var cos = MathF.Cos(degree); | ||||||
|  |              | ||||||
|  |             _matrix.SetRow(0 ,new Vector4(1,0,0,0)); | ||||||
|  |             _matrix.SetRow(1, new Vector4(0, cos, -sin, 0)); | ||||||
|  |             _matrix.SetRow(2, new Vector4(0, sin, cos, 0)); | ||||||
|  |             _matrix.SetRow(3, new Vector4(0, 0, 0, 1)); | ||||||
|  | 
 | ||||||
|  |             return _matrix; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 获得绕Y轴旋转矩阵 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="degree">旋转的角度</param> | ||||||
|  |         /// <returns></returns> | ||||||
|  |         public static Matrix4x4 RotateAxisY(float degree) | ||||||
|  |         { | ||||||
|  |             var sin = MathF.Sin(degree); | ||||||
|  |             var cos = MathF.Cos(degree); | ||||||
|  |              | ||||||
|  |             _matrix.SetRow(0, new Vector4(cos, 0, sin, 0)); | ||||||
|  |             _matrix.SetRow(1, new Vector4(0, 1, 0, 1)); | ||||||
|  |             _matrix.SetRow(2, new Vector4(-sin, 0, cos, 0)); | ||||||
|  |             _matrix.SetRow(3, new Vector4(0, 0, 0, 1)); | ||||||
|  | 
 | ||||||
|  |             return _matrix; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 获得绕Z轴旋转矩阵 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="degree">旋转的角度</param> | ||||||
|  |         /// <returns></returns> | ||||||
|  |         public static Matrix4x4 RotateAxisZ(float degree) | ||||||
|  |         { | ||||||
|  |             var sin = MathF.Sin(degree); | ||||||
|  |             var cos = MathF.Cos(degree); | ||||||
|  |              | ||||||
|  |             _matrix.SetRow(0, new Vector4(cos, -sin, 0, 0)); | ||||||
|  |             _matrix.SetRow(1, new Vector4(sin, cos, 0, 0)); | ||||||
|  |             _matrix.SetRow(2, new Vector4(0, 0, 1, 0)); | ||||||
|  |             _matrix.SetRow(3, new Vector4(0, 0, 0, 1)); | ||||||
|  | 
 | ||||||
|  |             return _matrix; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								Assets/Utils/RotateUtils.cs.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Assets/Utils/RotateUtils.cs.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: d748c6669d714e65a5ca9164c5798583 | ||||||
|  | timeCreated: 1677319275 | ||||||
| @@ -1,15 +1,15 @@ | |||||||
| { | { | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "com.unity.collab-proxy": "1.17.7", |     "com.unity.collab-proxy": "2.0.0", | ||||||
|     "com.unity.feature.development": "1.0.1", |     "com.unity.feature.development": "1.0.1", | ||||||
|     "com.unity.ide.rider": "3.0.18", |     "com.unity.ide.rider": "3.0.18", | ||||||
|     "com.unity.ide.visualstudio": "2.0.16", |     "com.unity.ide.visualstudio": "2.0.17", | ||||||
|     "com.unity.ide.vscode": "1.2.5", |     "com.unity.ide.vscode": "1.2.5", | ||||||
|     "com.unity.test-framework": "1.1.31", |     "com.unity.test-framework": "1.1.31", | ||||||
|     "com.unity.textmeshpro": "3.0.6", |     "com.unity.textmeshpro": "3.0.6", | ||||||
|     "com.unity.timeline": "1.6.4", |     "com.unity.timeline": "1.6.4", | ||||||
|     "com.unity.ugui": "1.0.0", |     "com.unity.ugui": "1.0.0", | ||||||
|     "com.unity.visualscripting": "1.7.8", |     "com.unity.visualscripting": "1.8.0", | ||||||
|     "com.unity.modules.ai": "1.0.0", |     "com.unity.modules.ai": "1.0.0", | ||||||
|     "com.unity.modules.androidjni": "1.0.0", |     "com.unity.modules.androidjni": "1.0.0", | ||||||
|     "com.unity.modules.animation": "1.0.0", |     "com.unity.modules.animation": "1.0.0", | ||||||
|   | |||||||
| @@ -1,12 +1,10 @@ | |||||||
| { | { | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "com.unity.collab-proxy": { |     "com.unity.collab-proxy": { | ||||||
|       "version": "1.17.7", |       "version": "2.0.0", | ||||||
|       "depth": 0, |       "depth": 0, | ||||||
|       "source": "registry", |       "source": "registry", | ||||||
|       "dependencies": { |       "dependencies": {}, | ||||||
|         "com.unity.services.core": "1.0.1" |  | ||||||
|       }, |  | ||||||
|       "url": "https://packages.unity.com" |       "url": "https://packages.unity.com" | ||||||
|     }, |     }, | ||||||
|     "com.unity.editorcoroutines": { |     "com.unity.editorcoroutines": { | ||||||
| @@ -28,11 +26,11 @@ | |||||||
|       "depth": 0, |       "depth": 0, | ||||||
|       "source": "builtin", |       "source": "builtin", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "com.unity.ide.visualstudio": "2.0.16", |         "com.unity.ide.visualstudio": "2.0.17", | ||||||
|         "com.unity.ide.rider": "3.0.16", |         "com.unity.ide.rider": "3.0.18", | ||||||
|         "com.unity.ide.vscode": "1.2.5", |         "com.unity.ide.vscode": "1.2.5", | ||||||
|         "com.unity.editorcoroutines": "1.0.0", |         "com.unity.editorcoroutines": "1.0.0", | ||||||
|         "com.unity.performance.profile-analyzer": "1.1.1", |         "com.unity.performance.profile-analyzer": "1.2.2", | ||||||
|         "com.unity.test-framework": "1.1.31", |         "com.unity.test-framework": "1.1.31", | ||||||
|         "com.unity.testtools.codecoverage": "1.2.2" |         "com.unity.testtools.codecoverage": "1.2.2" | ||||||
|       } |       } | ||||||
| @@ -47,7 +45,7 @@ | |||||||
|       "url": "https://packages.unity.com" |       "url": "https://packages.unity.com" | ||||||
|     }, |     }, | ||||||
|     "com.unity.ide.visualstudio": { |     "com.unity.ide.visualstudio": { | ||||||
|       "version": "2.0.16", |       "version": "2.0.17", | ||||||
|       "depth": 0, |       "depth": 0, | ||||||
|       "source": "registry", |       "source": "registry", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
| @@ -62,31 +60,13 @@ | |||||||
|       "dependencies": {}, |       "dependencies": {}, | ||||||
|       "url": "https://packages.unity.com" |       "url": "https://packages.unity.com" | ||||||
|     }, |     }, | ||||||
|     "com.unity.nuget.newtonsoft-json": { |  | ||||||
|       "version": "3.0.2", |  | ||||||
|       "depth": 2, |  | ||||||
|       "source": "registry", |  | ||||||
|       "dependencies": {}, |  | ||||||
|       "url": "https://packages.unity.com" |  | ||||||
|     }, |  | ||||||
|     "com.unity.performance.profile-analyzer": { |     "com.unity.performance.profile-analyzer": { | ||||||
|       "version": "1.1.1", |       "version": "1.2.2", | ||||||
|       "depth": 1, |       "depth": 1, | ||||||
|       "source": "registry", |       "source": "registry", | ||||||
|       "dependencies": {}, |       "dependencies": {}, | ||||||
|       "url": "https://packages.unity.com" |       "url": "https://packages.unity.com" | ||||||
|     }, |     }, | ||||||
|     "com.unity.services.core": { |  | ||||||
|       "version": "1.6.0", |  | ||||||
|       "depth": 1, |  | ||||||
|       "source": "registry", |  | ||||||
|       "dependencies": { |  | ||||||
|         "com.unity.modules.unitywebrequest": "1.0.0", |  | ||||||
|         "com.unity.nuget.newtonsoft-json": "3.0.2", |  | ||||||
|         "com.unity.modules.androidjni": "1.0.0" |  | ||||||
|       }, |  | ||||||
|       "url": "https://packages.unity.com" |  | ||||||
|     }, |  | ||||||
|     "com.unity.settings-manager": { |     "com.unity.settings-manager": { | ||||||
|       "version": "1.0.3", |       "version": "1.0.3", | ||||||
|       "depth": 2, |       "depth": 2, | ||||||
| @@ -146,7 +126,7 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "com.unity.visualscripting": { |     "com.unity.visualscripting": { | ||||||
|       "version": "1.7.8", |       "version": "1.8.0", | ||||||
|       "depth": 0, |       "depth": 0, | ||||||
|       "source": "registry", |       "source": "registry", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|   | |||||||
| @@ -25,7 +25,6 @@ MonoBehaviour: | |||||||
|     m_Scopes: [] |     m_Scopes: [] | ||||||
|     m_IsDefault: 1 |     m_IsDefault: 1 | ||||||
|     m_Capabilities: 7 |     m_Capabilities: 7 | ||||||
|     m_ConfigSource: 0 |  | ||||||
|   m_UserSelectedRegistryName:  |   m_UserSelectedRegistryName:  | ||||||
|   m_UserAddingNewScopedRegistry: 0 |   m_UserAddingNewScopedRegistry: 0 | ||||||
|   m_RegistryInfoDraft: |   m_RegistryInfoDraft: | ||||||
|   | |||||||
| @@ -1,2 +1,2 @@ | |||||||
| m_EditorVersion: 2021.3.16f1 | m_EditorVersion: 2021.3.19f1 | ||||||
| m_EditorVersionWithRevision: 2021.3.16f1 (4016570cf34f) | m_EditorVersionWithRevision: 2021.3.19f1 (c9714fde33b6) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user