Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
2 captures
12 Jun 22 - 14 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by skcsinc · Oct 27, 2018 at 01:05 AM · animationscripting problemeditortimeline

Evaluating animation curves in the Timeline

Is there a way to sample animation curves displayed in the Timeline panel for specific objects and at specific frames/times?

For example I've hand animated an object and can playback the animation using the play button in the "new" Timeline panel in Editor mode (not Game mode). I can then click the curves icon and see the animation curves. I want to write an editor script that can poll, for instance, the rotateY value at frame 30 or at time 1.0 regardless if a keyframe exists there or not (i.e. the value would be interpolated if not a defined keyframe).

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by seant_unity · Oct 29, 2018 at 11:24 AM

You can search through the timeline asset to find the clip(s) you need to sample. Then use the AnimationUtility methods to get the curves you are looking for.

For example:

         public static AnimationClip FindClipAtTime(TimelineAsset timeline, string nameOfTrackToFind, double time)
         {
             foreach (var track in timeline.GetOutputTracks())
             {
                 // find track name
                 if (track.name == nameOfTrackToFind)
                 {
                     foreach (var clip in track.GetClips())
                     {
                         if (clip.start >= time && clip.end <= time)
                         {
                             var asset = clip.asset as AnimationPlayableAsset;
                             if (asset != null)
                                 return asset.clip;
                        }
                     }
                 }
             }
 
             return null;
         }
 

Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image skcsinc · Oct 30, 2018 at 09:38 PM 0
Share

Thanks so much for the help! I've now the output I need based on your example. There are a few oddities:

  • there's no way to get an individual curve binding, rather (similar to your sample code) you have to iterate over all bindings comparing to the name of the one you want

  • the actual curve names are not what I expected, i.e. "localEulerAnglesRaw.y" ins$$anonymous$$d of "rotation.y" (but I guess they're differentiating between the internally stored quaternion value as opposed to the revealved Euler values)

  • there is a "SampleAnimation" method in the AnimationClip class but that seems to require an actual GameObject ins$$anonymous$$d of an AnimationCurve.

  • It seems a little convoluted and I'm not sure that what I have now is the best approach for what I'm trying to do

For reference here is the code I came up with to sample a specified curve's values over a time range via references from a Timeline's initial track/clip with an associated editor script with a button to execute the ExportData method so that it's all being run in Editor $$anonymous$$ode.:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.Timeline;
 using UnityEditor;
 
 public class DataExport : $$anonymous$$onoBehaviour {
     public TimelineAsset timeline;
     public string trackName;
     public float timeStart = 0f;
     public float timeEnd = 0f;
     public float timeStep = 0.12f;
 
     private TrackAsset track;
 
     public void ExportData() {
         track = timeline.GetOutputTrack(0);
         foreach (var clip in track.GetClips()) {
             var asset = clip.asset as AnimationPlayableAsset;
             var assetClip = asset.clip;
 
             foreach (var binding in AnimationUtility.GetCurveBindings(assetClip)) {
                 if (binding.propertyName == trackName) {
                     AnimationCurve curve = AnimationUtility.GetEditorCurve(assetClip, binding);
 
                     for (float t = timeStart; t < timeEnd; t+= timeStep)
                         Debug.LogWarning("t = " + t + ":\tv = " + curve.Evaluate(t));
                 }
             }
         }
     }
 }


Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

320 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Changing default animation type to Humanoid via script 1 Answer

How to create animations that can be edited with scripts in runtime? 1 Answer

Instruct an animation to jump to specific point in timeline 1 Answer

Get current Animation Controller being edited by Animator (In Editor) 0 Answers

In Timeline/custom Playables, how to get the original/current values of bound object when creating a new clip? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges