版本: Unity 6 (6000.0)
语言英语
  • C#

AnimationMode

UnityEditor 中的类

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读了用户提出的每项更改建议,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

AnimationModeAnimationWindow 用于存储 AnimationClip 播放修改的属性。

退出 AnimationMode 时,所有属性将恢复到其默认状态。动画属性也会在检查器中突出显示。使用 StartAnimationMode 进入动画模式。在动画模式下,编辑器会呈现淡色调以显示它正在进行动画处理。可以通过 SampleAnimationClip 对属性进行动画处理。

以下脚本示例演示了如何对游戏对象进行动画处理。 AnimationMode 提供了支持此功能的函数。演示可以从“示例/AnimationMode 演示”菜单启动。此演示启动后,需要在场景窗口中选择一个游戏对象。(此示例要求游戏不在游戏视图中运行。)选择游戏对象后,示例窗口将发生变化。为所选游戏对象选择一个创建的动画剪辑。加载动画剪辑后,可以将动画应用于游戏对象。单击“动画”按钮会在窗口中添加一个滑块。使用滑块会将动画应用于所选游戏对象。“锁定”按钮可防止将动画应用于其他游戏对象。

using UnityEngine;
using UnityEditor;

public class ExampleClass : EditorWindow { protected GameObject go; protected AnimationClip animationClip; protected float time = 0.0f; protected bool lockSelection = false; protected bool animationMode = false;

[MenuItem("Examples/AnimationMode demo", false, 2000)] public static void DoWindow() { var window = GetWindowWithRect<ExampleClass>(new Rect(0, 0, 300, 80)); window.Show(); }

// Has a GameObject been selection? public void OnSelectionChange() { if (!lockSelection) { go = Selection.activeGameObject; Repaint(); } }

// Main editor window public void OnGUI() { // Wait for user to select a GameObject if (go == null) { EditorGUILayout.HelpBox("Please select a GameObject", MessageType.Info); return; }

// Animate and Lock buttons. Check if Animate has changed GUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); GUILayout.Toggle(AnimationMode.InAnimationMode(), "Animate"); if (EditorGUI.EndChangeCheck()) ToggleAnimationMode();

GUILayout.FlexibleSpace(); lockSelection = GUILayout.Toggle(lockSelection, "Lock"); GUILayout.EndHorizontal();

// Slider to use when Animate has been ticked EditorGUILayout.BeginVertical(); animationClip = EditorGUILayout.ObjectField(animationClip, typeof(AnimationClip), false) as AnimationClip; if (animationClip != null) { float startTime = 0.0f; float stopTime = animationClip.length; time = EditorGUILayout.Slider(time, startTime, stopTime); } else if (AnimationMode.InAnimationMode()) AnimationMode.StopAnimationMode(); EditorGUILayout.EndVertical(); }

void Update() { if (go == null) return;

if (animationClip == null) return;

// Animate the GameObject if (!EditorApplication.isPlaying && AnimationMode.InAnimationMode()) { AnimationMode.BeginSampling(); AnimationMode.SampleAnimationClip(go, animationClip, time); AnimationMode.EndSampling();

SceneView.RepaintAll(); } }

void ToggleAnimationMode() { if (AnimationMode.InAnimationMode()) AnimationMode.StopAnimationMode(); else AnimationMode.StartAnimationMode(); } }

静态属性

animatedPropertyColor用于显示属性当前正在进行动画处理的颜色。
candidatePropertyColor用于显示已修改的动画属性的颜色。
recordedPropertyColor用于显示动画属性自动记录动画剪辑中更改的颜色。

静态方法

AddEditorCurveBinding将由 EditorCurveBinding 定义的属性标记为当前正在进行动画处理。
AddPropertyModification将属性标记为当前正在进行动画处理。
BeginSampling初始化动画剪辑采样的开始。
EndSampling完成动画剪辑的采样。
InAnimationMode检查编辑器是否处于动画模式。
IsPropertyAnimated检查指定的属性是否处于动画模式并正在进行动画处理。
SampleAnimationClip为游戏对象采样 AnimationClip,并在动画模式下记录修改的属性。
SamplePlayableGraph采样 PlayableGraph 的指定输出索引,并在动画模式下记录修改的属性。
StartAnimationMode启动动画模式。
StopAnimationMode停止动画模式并恢复在动画模式下进行动画处理的任何属性。