mirror of
				https://github.com/maxartz15/VertexAnimation.git
				synced 2025-11-04 10:25:44 +01:00 
			
		
		
		
	Apply root motion option.
Added option to apply root motion.
This commit is contained in:
		@@ -28,6 +28,7 @@ namespace TAO.VertexAnimation.Editor
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			EditorGUILayout.PropertyField(serializedObject.FindProperty("model"));
 | 
								EditorGUILayout.PropertyField(serializedObject.FindProperty("model"));
 | 
				
			||||||
			EditorGUILayout.PropertyField(serializedObject.FindProperty("animationClips"));
 | 
								EditorGUILayout.PropertyField(serializedObject.FindProperty("animationClips"));
 | 
				
			||||||
 | 
								EditorGUILayout.PropertyField(serializedObject.FindProperty("applyRootMotion"));
 | 
				
			||||||
			EditorGUILayout.PropertyField(serializedObject.FindProperty("fps"));
 | 
								EditorGUILayout.PropertyField(serializedObject.FindProperty("fps"));
 | 
				
			||||||
			EditorGUILayout.PropertyField(serializedObject.FindProperty("textureWidth"));
 | 
								EditorGUILayout.PropertyField(serializedObject.FindProperty("textureWidth"));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,6 +12,7 @@ namespace TAO.VertexAnimation.Editor
 | 
				
			|||||||
		// Input.
 | 
							// Input.
 | 
				
			||||||
		public GameObject model;
 | 
							public GameObject model;
 | 
				
			||||||
		public AnimationClip[] animationClips;
 | 
							public AnimationClip[] animationClips;
 | 
				
			||||||
 | 
							public bool applyRootMotion = false;
 | 
				
			||||||
		[Range(1, 60)]
 | 
							[Range(1, 60)]
 | 
				
			||||||
		public int fps = 24;
 | 
							public int fps = 24;
 | 
				
			||||||
		public int textureWidth = 512;
 | 
							public int textureWidth = 512;
 | 
				
			||||||
@@ -97,7 +98,7 @@ namespace TAO.VertexAnimation.Editor
 | 
				
			|||||||
			target.name = model.name;
 | 
								target.name = model.name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			target.ConbineAndConvertGameObject();
 | 
								target.ConbineAndConvertGameObject();
 | 
				
			||||||
			AnimationBaker.BakedData bakedData = target.Bake(animationClips, fps, textureWidth);
 | 
								AnimationBaker.BakedData bakedData = target.Bake(animationClips, applyRootMotion, fps, textureWidth);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			positionMap = VA_Texture2DArrayUtils.CreateTextureArray(bakedData.positionMaps.ToArray(), false, true, TextureWrapMode.Repeat, FilterMode.Point, 1, string.Format("{0}_PositionMap", name), true);
 | 
								positionMap = VA_Texture2DArrayUtils.CreateTextureArray(bakedData.positionMaps.ToArray(), false, true, TextureWrapMode.Repeat, FilterMode.Point, 1, string.Format("{0}_PositionMap", name), true);
 | 
				
			||||||
			meshes = bakedData.mesh.GenerateLOD(lodSettings.LODCount(), lodSettings.GetQualitySettings());
 | 
								meshes = bakedData.mesh.GenerateLOD(lodSettings.LODCount(), lodSettings.GetQualitySettings());
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,6 +25,7 @@ namespace TAO.VertexAnimation
 | 
				
			|||||||
		[System.Serializable]
 | 
							[System.Serializable]
 | 
				
			||||||
		public struct AnimationInfo
 | 
							public struct AnimationInfo
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
								public bool applyRootMotion;
 | 
				
			||||||
			public int rawFrameHeight;
 | 
								public int rawFrameHeight;
 | 
				
			||||||
			public int frameHeight;
 | 
								public int frameHeight;
 | 
				
			||||||
			public int frameSpacing;
 | 
								public int frameSpacing;
 | 
				
			||||||
@@ -35,8 +36,9 @@ namespace TAO.VertexAnimation
 | 
				
			|||||||
			public int fps;
 | 
								public int fps;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Create animation info and calculate values.
 | 
								// Create animation info and calculate values.
 | 
				
			||||||
			public AnimationInfo(Mesh mesh, int frames, int textureWidth, int fps)
 | 
								public AnimationInfo(Mesh mesh, bool applyRootMotion, int frames, int textureWidth, int fps)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
 | 
									this.applyRootMotion = applyRootMotion;
 | 
				
			||||||
				this.frames = frames;
 | 
									this.frames = frames;
 | 
				
			||||||
				this.textureWidth = textureWidth;
 | 
									this.textureWidth = textureWidth;
 | 
				
			||||||
				this.fps = fps;
 | 
									this.fps = fps;
 | 
				
			||||||
@@ -51,7 +53,7 @@ namespace TAO.VertexAnimation
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public static BakedData Bake(this GameObject model, AnimationClip[] animationClips, int fps, int textureWidth)
 | 
							public static BakedData Bake(this GameObject model, AnimationClip[] animationClips, bool applyRootMotion, int fps, int textureWidth)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			BakedData bakedData = new BakedData()
 | 
								BakedData bakedData = new BakedData()
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@@ -75,7 +77,7 @@ namespace TAO.VertexAnimation
 | 
				
			|||||||
			Mesh mesh = model.GetComponent<SkinnedMeshRenderer>().sharedMesh;
 | 
								Mesh mesh = model.GetComponent<SkinnedMeshRenderer>().sharedMesh;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Get the info for the biggest animation.
 | 
								// Get the info for the biggest animation.
 | 
				
			||||||
			AnimationInfo animationInfo = new AnimationInfo(mesh, maxFrames, textureWidth, fps);
 | 
								AnimationInfo animationInfo = new AnimationInfo(mesh, applyRootMotion, maxFrames, textureWidth, fps);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			foreach (AnimationClip ac in animationClips)
 | 
								foreach (AnimationClip ac in animationClips)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@@ -98,6 +100,12 @@ namespace TAO.VertexAnimation
 | 
				
			|||||||
				name = string.Format("{0}", model.name)
 | 
									name = string.Format("{0}", model.name)
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Set root motion options.
 | 
				
			||||||
 | 
								if (model.TryGetComponent(out Animator animator))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									animator.applyRootMotion = animationInfo.applyRootMotion;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Bake mesh for a copy and to apply the new UV's to.
 | 
								// Bake mesh for a copy and to apply the new UV's to.
 | 
				
			||||||
			SkinnedMeshRenderer skinnedMeshRenderer = model.GetComponent<SkinnedMeshRenderer>();
 | 
								SkinnedMeshRenderer skinnedMeshRenderer = model.GetComponent<SkinnedMeshRenderer>();
 | 
				
			||||||
			skinnedMeshRenderer.BakeMesh(mesh);
 | 
								skinnedMeshRenderer.BakeMesh(mesh);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user