Новичок в Unity здесь.Для этого проекта я читаю во внешнем AnimationCurve и пытаюсь использовать его для регулировки громкости моего GameObject в каждом кадре в функции Update.Я нашел документацию о том, как получить доступ к громкости моего компонента AudioSource GameObject (это работает), но я не могу понять, как использовать мою оцененную кривую для обновления громкости.
Screencap с импортированным AnimationCurve и оцененными значениями
Мой скрипт cs включен ниже.Извините, если это немного непрозрачно.Это для нейробиологического эксперимента, поэтому мне нужно тщательно контролировать кривые анимации.Он считывает время и значения (хранящиеся в currentCurveData), используемые для добавления ключевых кадров в новый AnimationCurve (curveThisTrl) в функции SetAnimationFrames ().
Ключевая часть находится в Update ().Исходный файл tone.volume правильный, поэтому я знаю, что он читает это свойство из GameObject.Я также вижу правильные значения кривой, поступающие в журнал отладки каждый кадр, поэтому я знаю, что оценка кривой работает.Это просто не изменяет свойство громкости GameObject, как я хочу.
Надеюсь, этого достаточно, чтобы обнаружить проблему, но если нет, я могу попытаться предоставить тест AnimationCurve для воспроизводимости.Заранее благодарю за любую помощь.
public class AnimationControl : MonoBehaviour {
private DataController dataControllerRef;
private CurveDataSingleTrial currentCurveData;
private float initTime;
public AnimationCurve curveThisTrl;
AudioSource tone;
void Awake()
{
initTime = Time.time;
}
// Use this for initialization
void Start ()
{
// Get references to key objects in scene
dataControllerRef = FindObjectOfType<DataController>(); // Has values from JSON
tone = GetComponent<AudioSource>();
Debug.Log(tone.volume);
// query the DataController for the current curve data
currentCurveData = dataControllerRef.GetCurrentCurveData();
SetAnimationFrames();
}
void SetAnimationFrames()
{
int numKeyFrames = currentCurveData.keyframeTimes.Length;
for (int c = 0; c < numKeyFrames; c++)
{
curveThisTrl.AddKey(currentCurveData.keyframeTimes[c], currentCurveData.keyframeVals[c]);
}
}
// Update is called once per frame
void Update ()
{
float currTime = Time.time - initTime;
tone.volume = curveThisTrl.Evaluate(currTime);
Debug.Log(tone.volume);
}
}