这里是Unity的新手。对于这个项目,我正在阅读外部的AnimationCurve,并尝试使用它来在Update函数的每一帧中调整GameObject的音量。我找到了有关如何访问AudioSource GameObject组件的音量的文档(正在运行),但是我不知道如何使用评估的曲线来更新音量。
Screencap with imported AnimationCurve and evaluated values
我的cs脚本包含在下面。抱歉,如果有点不透明。这是用于神经科学实验的,因此我需要仔细控制动画曲线。它会读取用于将关键帧添加到SetAnimationFrames()函数中新的AnimationCurve(curveThisTrl)中的时间和值(存储在currentCurveData中)。
关键部分在Update()中。最初的tone.volume是正确的,所以我知道它是从GameObject读取该属性的。我还可以在每帧调试日志中看到正确的曲线值,因此我知道曲线评估是有效的。只是没有按我想要的那样更改GameObject的volume属性。
希望这是足够的信息,可以发现问题,但是如果没有,我可以尝试提供测试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);
}
}