Code generated animation clip missing component when assigned to an animation controller.
I am using animation clips/curves to record positional data from a vive tracker during run-time. After generating the clip and saving it as an asset I am unable to drop it into an animation controller without getting a "Missing Component" error.
Initially I suspected the issue was with the relative path chosen. I cleared the path and the issue persisted. When I select the property in the animation it highlights the correct corresponding gameobject in the hierarchy. When I review the original clip before attaching it to an animation controller the positional data is present and updates as expected. After dropping it into the animation controller all of the property values zero out but all the frames are still present.
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class MovementRecording : MonoBehaviour
{
public List<Keyframe> ksx = new List<Keyframe>();
public List<Keyframe> ksy = new List<Keyframe>();
public List<Keyframe> ksz = new List<Keyframe>();
public Transform leftHand;
private float _timeStart = 0.0f;
private float _timePassed = 0.0f;
private bool _started = false;
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
if (!_started)
{
_started = true;
InvokeRepeating("Record", 0.0f, 0.1f);
}else if (_started)
{
_started = false;
CancelInvoke("Record");
FinishRecord();
}
}
}
private void Record()
{
ksx.Add(new Keyframe((ksx.Count + 1) * 0.1f, leftHand.position.x));
ksy.Add(new Keyframe((ksy.Count + 1) * 0.1f, leftHand.position.y));
ksz.Add(new Keyframe((ksz.Count + 1) * 0.1f, leftHand.position.z));
}
private void FinishRecord()
{
AnimationClip clip = new AnimationClip();
AnimationCurve curve = new AnimationCurve(ksx.ToArray());
clip.SetCurve("", typeof(Transform), "position.x", curve);
curve = new AnimationCurve(ksy.ToArray());
clip.SetCurve("", typeof(Transform), "position.y", curve);
curve = new AnimationCurve(ksz.ToArray());
clip.SetCurve("", typeof(Transform), "position.z", curve);
AssetDatabase.CreateAsset(clip, "Assets/Test.anim");
}
}
Any help would be really appreciated! :)
Cheers
Answer by Llourn · May 14, 2019 at 03:05 PM
I was using the wrong property name for the curve. It's not position.x it's localPosition.x.
--facepalm--
Your answer
Follow this Question
Related Questions
How to use RenderStaticPreview OR get project viewer thumbnails for ScriptableObject assets? 2 Answers
BasicFPS controller "Can not be loaded" 0 Answers
Access my scripts/assets from inside StandardAsset ThirdPersonuserControl.cs 1 Answer
problem with asset 2 Answers
Setting an asset to an instance of a class in a script 1 Answer