Keyframe
структура в UnityEngine
Выполнено в:UnityEngine.CoreModule
Описание
Ключевой кадр, который может быть введен в AnimationCurve.
Ключевые кадры используются для управления изменением значения AnimationCurve со временем. Каждый ключевой кадр определяется его позицией в AnimationCurve через свойства Keyframe.time (горизонтальная ось) и Keyframe.value (вертикальная ось). Вы можете управлять интерполяцией между различными ключевыми кадрами и наклонами AnimationCurve через свойства Keyframe.inTangent, Keyframe.outTangent, Keyframe.weightedMode, Keyframe.inWeight и Keyframe.outWeight. Обратите внимание, что в отличие от того, что может подразумевать название свойства Keyframe.time, оно не связано со временем и может просто рассматриваться как положение на горизонтальной оси двухмерного пространства.
Сегмент Эрмита
Когда оба ключевых кадра weightedMode установлены на WeightedMode.None, сегмент кривой интерполируется с помощью алгоритма кривой Эрмита. Hermite оценивает быстрее, чем Безье и является по умолчанию weightedMode для Keyframe.
Сегмент Безье
Настройка weightedMode изменит интерполяцию соседних сегментов. Взвешенные сегменты интерполируются с помощью алгоритма кривой Безье. Для данного взвешенного ключевого кадра интерполирующая функция использует значение Keyframe.outWeight и следующего ключевого кадра Keyframe.inWeight вместе с обоими ключевыми кадрами values для вычисления кривой. Если вес не установлен (когда любой из ключевых кадров Keyframe.weightedMode установлен на WeightedMode.None), то используется вес 1/3.
Дополнительные ресурсы: 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); } }
Свойства
| Свойство | Описание |
|---|---|
| inTangent | Задает входящий тангенс для этого ключа. Входящий тангенс влияет на наклон кривой от предыдущего ключа к этому ключу. |
| inWeight | Задает вес входящих ключей для этого ключа. Вес входящих ключей влияет на наклон кривой от предыдущего ключа к этому ключу. |
| outTangent | Устанавливается выходная касательная для этого ключа. Выходная касательная влияет на наклон кривой от этого ключа к следующему. |
| outWeight | Задает вес исходящего сигнала для этого ключа. Вес исходящего сигнала влияет на наклон кривой от этого ключа к следующему. |
| time | Время ключевого кадра. |
| value | Значение кривой на ключевом кадре. |
| weightedMode | Взвешенный режим для ключевого кадра. |
Конструкторы
| Конструктор | Описание |
|---|---|
| Keyframe | Создает ключевой кадр с Keyframe.weightedMode по умолчанию WeightedMode.None. |