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

AnimationClip.SetCurve

建议更改

成功!

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

关闭

提交失败

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

关闭

取消

切换到手册

声明

public void SetCurve(string relativePath, Type type, string propertyName, AnimationCurve curve);

参数

relativePath 此曲线应用到的游戏对象的路径。 relativePath 的格式类似于路径名,例如“root/spine/leftArm”。如果 relativePath 为空,则它指的是动画剪辑附加到的游戏对象。
type 动画组件的类类型。
propertyName 正在动画的属性的名称或路径。
curve 动画曲线。

描述

将曲线分配给动画特定属性。

如果 curve 为 null,则将删除曲线。如果该属性已经存在曲线,则会用新曲线替换它。

注意: SetCurve 仅适用于传统动画剪辑的运行时。对于非传统 AnimationClips,它是一个仅限编辑器的函数。

以下脚本示例展示了如何使用动画剪辑动画化 GameObject 的位置。使用 SetCurve() 将动画曲线设置为 AnimationClip 上。此示例将 x 偏移量从 1.0 移动到 0.0。

SetCurve API 可用于动画化各种参数。一些典型的组件,如 TransformMaterial,具有易于访问的变量。例如, Transform 具有 Transform.localPosition 等变量。可以使用 AnimationClip API 动画化 localPosition 的 x、y 和 z 值。查看 Transform 文档以查看变量以及如何动画化它们。

Material 类还链接到可以动画化的变量。这些变量来自用于渲染的着色器。使用材质下拉菜单中的“编辑着色器...”选项可以显示所有可以动画化的参数。通过引用材质参数的 Renderer 类来动画化材质参数。所有可动画化的材质参数都以 material 前缀开头,后跟以下划线开头的属性名称。例如,可以动画化颜色 (material._Color) 和缩放 (material._BumpScale)。

以下示例脚本展示了如何同时以两种方式动画化 GameObject。在此示例中,对 GameObject 的位置进行动画化,并且材质颜色也随着时间的推移而发生变化。

// This script example shows how SetCurve() can be used
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { // Animate the position and color of the GameObject public void Start() { Animation anim = GetComponent<Animation>(); AnimationCurve curve;

// create a new AnimationClip AnimationClip clip = new AnimationClip(); clip.legacy = true;

// create a curve to move the GameObject and assign to the clip Keyframe[] keys; keys = new Keyframe[3]; keys[0] = new Keyframe(0.0f, 0.0f); keys[1] = new Keyframe(1.0f, 1.5f); keys[2] = new Keyframe(2.0f, 0.0f); curve = new AnimationCurve(keys); clip.SetCurve("", typeof(Transform), "localPosition.x", curve);

// update the clip to a change the red color curve = AnimationCurve.Linear(0.0f, 1.0f, 2.0f, 0.0f); clip.SetCurve("", typeof(Renderer), "material._Color.r", curve);

// now animate the GameObject anim.AddClip(clip, clip.name); anim.Play(clip.name); } }

可以通过将资产序列化设置为“强制文本”模式(在编辑器设置中)来查找属性名称。使用 编辑 -> 项目设置 -> 编辑器 来启用此模式。然后,由编辑器写入的文本文件将包括属性的名称。例如,为场景对象写入的 yaml 文件将包括摄像机设置。查看此 yaml 文件将显示

m_BackGroundColor: {r: .192156866, g: .301960796, b: .474509805, a: .0196078438}
m_NormalizedViewPortRect
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: .300000012
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1

这表明 FOV 参数的名称是“field of view”。如果您想创建动画剪辑来动画化摄像机视场,则应将“field of view”作为 propertyName 传递。

另一个示例是访问 Light 设置。 scene.unity 文件(假设名为 scene 的场景)将包含灯光颜色的字符串。脚本可以通过访问 m_Color 来访问灯光颜色。此示例需要场景中存在灯光才能正常工作。

其他资源: ClearCurves 函数和 AnimationCurve 类。