Unity3D: динамическая настройка громкости AudioSource с использованием AnimationCurve - PullRequest
0 голосов
/ 02 октября 2018

Новичок в 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);

    }
}
...