LanguageEnglish
  • C#

Keyframe

struct in UnityEngine

/

Implemented in:UnityEngine.CoreModule

Description

A keyframe that can be injected into an AnimationCurve.

Keyframes are used to control how the value of an AnimationCurve changes over time. Each Keyframe is determined by its position in the AnimationCurve through the Keyframe.time (horizontal axis) and Keyframe.value (vertical axis) properties. You can control how interpolation is handled between different Keyframes and the AnimationCurve slopes through the Keyframe.inTangent, Keyframe.outTangent, Keyframe.weightedMode, Keyframe.inWeight and Keyframe.outWeight properties. Note that unlike what the Keyframe.time property name might imply, it is not actually tied to time and can simply be thought of as a position on the horizontal axis of a two-dimensional space.

Hermite Segment

When both keyframes weightedMode are set to WeightedMode.None, the curve segment is interpolated using a Hermite curve algorithm. Hermite evaluates faster than Bezier and is the default weightedMode for a Keyframe.

Bezier Segment

Setting weightedMode will change how the neighbouring segments are interpolated. Weighted segments are interpolated using a Bezier curve algorithm. For a given weighted keyframe, the interpolating function uses the Keyframe.outWeight value and the next keyframe’s Keyframe.inWeight alongside both keyframes values to calculate the curve. If no weight is set (when either keyframe Keyframe.weightedMode is set to WeightedMode.None), then a weight value of 1/3 is used.

Additional resources: AnimationCurve.AddKey, AnimationCurve.keys, AnimationCurve.Evaluate.

using UnityEngine;

//This script makes the GameObject move back and forth from -5 to +5 on the x-axis public class KeyFrameExample : MonoBehaviour { AnimationCurve animCurve = null;

void Start() { Keyframe[] ks = new Keyframe[2];

ks[0] = new Keyframe(0f, -5f); //Create a Keyframe at time 0 with a value of -5f

ks[1] = new Keyframe(1f, 5f); //Create a Keyframe at time 1 with a value of 5f

animCurve = new AnimationCurve(ks); animCurve.postWrapMode = WrapMode.PingPong; //Set the WrapMode to PingPong in order to make the GameObject go back and forth }

void Update() { if (animCurve != null) transform.position = new Vector3(animCurve.Evaluate(Time.time), 0.0f, 0.0f); } }

Properties

inTangentSets the incoming tangent for this key. The incoming tangent affects the slope of the curve from the previous key to this key.
inWeightSets the incoming weight for this key. The incoming weight affects the slope of the curve from the previous key to this key.
outTangentSets the outgoing tangent for this key. The outgoing tangent affects the slope of the curve from this key to the next key.
outWeightSets the outgoing weight for this key. The outgoing weight affects the slope of the curve from this key to the next key.
timeThe time of the keyframe.
valueThe value of the curve at keyframe.
weightedModeWeighted mode for the keyframe.

Constructors

KeyframeCreates a keyframe with a Keyframe.weightedMode defaulting to WeightedMode.None.

对文档有任何疑问,请移步至开发者社区提问,我们将尽快为您解答
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961