Объявление
public void SetCurve(string relativePath, Type type, string propertyName, AnimationCurve curve);Параметры
relativePath | Путь к игровому объекту, к которому относится эта кривая. Формат relativePath аналогичен пути, например. "корень/позвоночник/левая рука". Если relativePath пуст, это относится к игровому объекту, к которому прикреплен анимационный клип. |
type | Тип класса анимируемого компонента. |
propertyName | Имя или путь к анимируемому свойству. |
curve | Кривая анимации. |
Описание
Назначает кривую для анимации определенного свойства.
Если curve
имеет значение null, кривая будет удалена. Если кривая для этого свойства уже существует, она будет заменена.
Примечание.SetCurve
будет работать только во время выполнения для устаревших анимационных клипов. Для неустаревших AnimationClips это функция только для редактора.
В следующем примере скрипта показано, как положение GameObject
можно анимировать с помощью анимационного клипа. Анимированная кривая устанавливается на AnimationClip с помощью SetCurve()
. В этом примере смещение x перемещается с 1,0 до 0,0.
API SetCurve можно использовать для анимации самых разных параметров. Некоторые типичные компоненты, такие как Transform и Material, имеют простой доступ к переменным. Например, Transform содержит такие переменные, как Transform.localPosition. Значения x, y и z для localPosition
можно анимировать с помощью API AnimationClip. Просмотрите документацию по Transform, чтобы увидеть переменные и то, как их можно анимировать.
Класс Material также связан с переменными, которые можно анимировать. Они исходят из шейдера, который используется для рендеринга. При использовании параметра «Редактировать шейдер...» в раскрывающемся списке материалов отображаются все параметры, которые можно анимировать. Все анимируемые параметры начинаются с подчеркивания, поэтому можно анимировать, например, цвет (_Color
) и масштаб (_BumpScale
).< /p>
Чтобы проиндексировать несколько материалов в одном и том же средстве визуализации, вы можете добавить к атрибуту такой префикс:"[1]._MainTex.offset.y"
.
В приведенном ниже примере скрипта показано, как можно одновременно анимировать GameObject двумя способами. В этом примере положение GameObject анимировано, а цвет материала также меняется с течением времени.
// Этот пример скрипта показывает, как можно использовать SetCurve()
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
// Анимируем положение и цвет GameObject
public void Start()
{
Animation anim = GetComponent<Animation>();
AnimationCurve curve;
// создаем новый AnimationClipAnimationClip 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);
// обновить клип, изменив красный цвет
curve = AnimationCurve.Linear(0.0f, 1.0f, 2.0f, 0.0f);
clip.SetCurve("", typeof(Material), "_Color.r", curve);
// теперь анимируем GameObject
anim.AddClip(clip, clip.name);
anim.Play(clip.name);
}
}
Названия свойств можно найти, установив для сериализации активов режим Force Text в настройках редактора. Используйте Edit->Project Settings->Editor
, чтобы включить этот режим. Текстовые файлы, которые затем записываются редактором, будут включать имена свойств. Например, файл yaml, написанный для объекта сцены, будет включать настройки камеры. Глядя на этот файл yaml, вы увидите:
m_BackGroundColor: {r: .192156866, g: .301960796, b: .474509805, a: .0196078438}
m_NormalizedViewPortRect:
сериализованная версия: 2
x: 0
д: 0
ширина: 1
высота: 1
рядом с плоскостью отсечения: .300000012
дальняя плоскость отсечения: 1000
поле зрения: 60
орфографический: 0
орфографический размер: 5
м_Глубина: -1
Это показывает, что название параметра FOV — «поле зрения». Если вы хотите создать анимационный клип для анимации поля зрения камеры, вы должны передать «поле зрения» в качестве свойства.
Другим примером является доступ к настройкам Light
. Файл scene.unity
(при условии, что сцена называется scene
) будет иметь строку для цвета света. Сценарий может получить доступ к цвету света, обратившись к m_Color
. Для работы этого примера сцена должна иметь свет.
Посмотрите так же: функцию ClearCurves и класс AnimationCurve.