Editor에서 Script로 Timelineasset 메모 생성
14080 단어 Unity2017.1Unitytimeline
Unity2017.1.0f3
(ver가 상승하면 API가 다양하게 변하거나 증가할 수 있음)
요점
TrackAsset은 Timelineasset입니다.CreateTrack을 통해 생성
PlayableAsset 및 Recordable의 Animation Clip은 AssetDatabase입니다.AddObject ToAsset을 사용하여 Timeline Asset을 만든 아이
https://docs.unity3d.com/ScriptReference/AssetDatabase.AddObjectToAsset.html
(통상 UI 작업에 추가된 PlayableAsset은 asset.hideFlags = HideFlags.HideInHierrache;)
Timeline 구성
참조: http://www.shibuya24.info/entry/timeline_basis
TimlineAsset
TrackAsset을 관리하는 리더
그리고 전체적인 재생 시간을 설정해야 돼요.
https://docs.unity3d.com/2017.1/Documentation/ScriptReference/Timeline.TimelineAsset.html
TrackAsset
장면의 Object와 바인딩
Timeline Clip을 묶어서 저장해 두세요.
물려받은 다양한 종류가 있어요.
https://docs.unity3d.com/2017.1/Documentation/ScriptReference/Timeline.TrackAsset.html
TimelineClip + PlayableAsset
Timeline Clip은 언제부터 언제까지 어떻게 섞는지 정보만 가지고 있습니다.
https://docs.unity3d.com/2017.1/Documentation/ScriptReference/Timeline.TimelineClip.html
PlayableAsset에는 TimelineClip이 구체적으로 무엇을 하는지 정보가 있습니다.
예를 들어 Animation PlayableAsset의 경우 "어느 위치에서 어떤 애니메이션을 하는지"
https://docs.unity3d.com/2017.1/Documentation/ScriptReference/Timeline.AnimationPlayableAsset.html
견본
시험을 준비하다
AssetDatabase가 제작되었습니다.SaveAssets() 및 AssetDatabase입니다.Refresh() 없이는 Unity를 감지할 수 없습니다.
Timelineasset 생성 및 저장
public static TimelineAsset CreateTimelineAsset(string path) {
var timelineAsset = ScriptableObject.CreateInstance<TimelineAsset>();
AssetDatabase.CreateAsset(timelineAsset, path);
return timelineAsset;
}
Timelineasset에 TrackAsset 추가
어떤 트랙의 아이가 되고 싶으면 Parent를 지목하세요.
Grop Track 같은 친자관계를 전제로 하는 Track입니다. public static T CreateTrackAsset<T>(TimelineAsset timelineAsset, string trackName, TrackAsset parent = null) where T : TrackAsset {
return (T)timelineAsset.CreateTrack(typeof(T), parent, trackName);
}
PlayableAsset을 생성하여 TimelineAsset의 하위 항목에 추가
public static T CreatePlayableAsset<T>(TimelineAsset timelineAsset, string playableAssetName) where T : PlayableAsset {
var playableAsset = (T)ScriptableObject.CreateInstance(typeof(T));
playableAsset.name = playableAssetName;
playableAsset.hideFlags = HideFlags.HideInHierarchy;
AssetDatabase.AddObjectToAsset(playableAsset, timelineAsset);
return playableAsset;
}
TimelineClip 생성 및 TrackAsset에 추가
public static TimelineClip CreateTimelineClip(TrackAsset parent, PlayableAsset playableAsset) {
var timelineClip = parent.CreateDefaultClip();
timelineClip.asset = playableAsset;
return timelineClip;
}
Animation Track의 Recordable Animation Clip 추가
편집 가능한 Animation Clip으로 추가
더 좋은 방법이 있을지도 몰라요. public static void AddAnimationClip(AnimationTrack trackAsset, TimelineClip timelineClip, AnimationClip clip) {
if (timelineClip.asset as AnimationPlayableAsset == null) {
Debug.LogError("null AnimationPlayableAsset");
return;
}
var setClipFieldInfo = typeof(TrackAsset).GetField("m_AnimClip", BindingFlags.NonPublic | BindingFlags.Instance);
setClipFieldInfo.SetValue(trackAsset, clip);
var setRecordableFieldInfo = typeof(TimelineClip).GetField("m_Recordable", BindingFlags.NonPublic | BindingFlags.Instance);
setRecordableFieldInfo.SetValue(timelineClip, true);
(timelineClip.asset as AnimationPlayableAsset).clip = clip;
AssetDatabase.AddObjectToAsset(clip, trackAsset.timelineAsset);
}
생성 테스트
[MenuItem("Test/TimelineCreateTest")]
static void TimelineCreateTest() {
var timelineAsset = CreateTimelineAsset("Assets/test.playable");
var groupTrack = CreateTrackAsset<GroupTrack>(timelineAsset, "Parent");
var animationTrack = CreateTrackAsset<AnimationTrack>(timelineAsset, "Child", groupTrack);
var animationPlayableAsset = CreatePlayableAsset<AnimationPlayableAsset>(timelineAsset, "AnimationPlayableAsset");
var timelineClip = CreateTimelineClip(animationTrack, animationPlayableAsset);
AddRecordableAnimationClip(animationTrack, timelineClip, new AnimationClip { name = "TestRecordable" });
AssetDatabase.SaveAssets();
}
Reference
이 문제에 관하여(Editor에서 Script로 Timelineasset 메모 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/furai13/items/d2048d49dde45823b3de
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
시험을 준비하다
AssetDatabase가 제작되었습니다.SaveAssets() 및 AssetDatabase입니다.Refresh() 없이는 Unity를 감지할 수 없습니다.
Timelineasset 생성 및 저장
public static TimelineAsset CreateTimelineAsset(string path) {
var timelineAsset = ScriptableObject.CreateInstance<TimelineAsset>();
AssetDatabase.CreateAsset(timelineAsset, path);
return timelineAsset;
}
Timelineasset에 TrackAsset 추가
어떤 트랙의 아이가 되고 싶으면 Parent를 지목하세요.
Grop Track 같은 친자관계를 전제로 하는 Track입니다.
public static T CreateTrackAsset<T>(TimelineAsset timelineAsset, string trackName, TrackAsset parent = null) where T : TrackAsset {
return (T)timelineAsset.CreateTrack(typeof(T), parent, trackName);
}
PlayableAsset을 생성하여 TimelineAsset의 하위 항목에 추가
public static T CreatePlayableAsset<T>(TimelineAsset timelineAsset, string playableAssetName) where T : PlayableAsset {
var playableAsset = (T)ScriptableObject.CreateInstance(typeof(T));
playableAsset.name = playableAssetName;
playableAsset.hideFlags = HideFlags.HideInHierarchy;
AssetDatabase.AddObjectToAsset(playableAsset, timelineAsset);
return playableAsset;
}
TimelineClip 생성 및 TrackAsset에 추가
public static TimelineClip CreateTimelineClip(TrackAsset parent, PlayableAsset playableAsset) {
var timelineClip = parent.CreateDefaultClip();
timelineClip.asset = playableAsset;
return timelineClip;
}
Animation Track의 Recordable Animation Clip 추가
편집 가능한 Animation Clip으로 추가
더 좋은 방법이 있을지도 몰라요.
public static void AddAnimationClip(AnimationTrack trackAsset, TimelineClip timelineClip, AnimationClip clip) {
if (timelineClip.asset as AnimationPlayableAsset == null) {
Debug.LogError("null AnimationPlayableAsset");
return;
}
var setClipFieldInfo = typeof(TrackAsset).GetField("m_AnimClip", BindingFlags.NonPublic | BindingFlags.Instance);
setClipFieldInfo.SetValue(trackAsset, clip);
var setRecordableFieldInfo = typeof(TimelineClip).GetField("m_Recordable", BindingFlags.NonPublic | BindingFlags.Instance);
setRecordableFieldInfo.SetValue(timelineClip, true);
(timelineClip.asset as AnimationPlayableAsset).clip = clip;
AssetDatabase.AddObjectToAsset(clip, trackAsset.timelineAsset);
}
생성 테스트
[MenuItem("Test/TimelineCreateTest")]
static void TimelineCreateTest() {
var timelineAsset = CreateTimelineAsset("Assets/test.playable");
var groupTrack = CreateTrackAsset<GroupTrack>(timelineAsset, "Parent");
var animationTrack = CreateTrackAsset<AnimationTrack>(timelineAsset, "Child", groupTrack);
var animationPlayableAsset = CreatePlayableAsset<AnimationPlayableAsset>(timelineAsset, "AnimationPlayableAsset");
var timelineClip = CreateTimelineClip(animationTrack, animationPlayableAsset);
AddRecordableAnimationClip(animationTrack, timelineClip, new AnimationClip { name = "TestRecordable" });
AssetDatabase.SaveAssets();
}
Reference
이 문제에 관하여(Editor에서 Script로 Timelineasset 메모 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/furai13/items/d2048d49dde45823b3de텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)