c# - 在Unity中使用音频频谱C#脚本更改Trail Renderer的宽度参数

标签 c# unity3d audio

我正在尝试找到一种方法,可以使用音频文件中的音频频谱动态更改轨迹渲染器的宽度参数。我已经成功地能够更改游戏对象的比例,但是无法更改轨迹渲染器本身的实际宽度参数。这是用于动态更改音频频谱使用比例的代码。任何帮助或建议,将不胜感激!谢谢

使用音频频谱更改音阶的代码:

using UnityEngine;
using System.Collections;

public class trailTest : MonoBehaviour {
public float width = 5.0f;
public bool useCurve = true;
private TrailRenderer tr;
public int numberOfObjects = 1;


void Start ()
{
    tr = GetComponent<TrailRenderer> ();
    tr.material = new Material (Shader.Find ("Sprites/Default"));
}

void Update ()
{
    AnimationCurve curve = new AnimationCurve ();
    if (useCurve) {
        curve.AddKey (0.0f, 0.0f);
        curve.AddKey (1.0f, 1.0f);
    } else {
        curve.AddKey (0.0f, 1.0f);
        curve.AddKey (1.0f, 1.0f);
    }

    float [] spectrum = AudioListener.GetSpectrumData (1024, 0, FFTWindow.Hamming);
    for (int i = 0; i < numberOfObjects; i++) {
        Vector3 previousScale = tr.transform.localScale;
        previousScale.y = Mathf.Lerp (previousScale.y, spectrum [i] * 80, Time.deltaTime * 30);
        tr.transform.localScale = previousScale;

      }
   }
 }

最佳答案

解决了:

using UnityEngine;
using System.Collections;

public class trailTest : MonoBehaviour
{
    private TrailRenderer trailRenderer;
    public GameObject [] trailerbaby;
    public int numberOfObjects = 1;
    void Start ()
    {
        trailRenderer = gameObject.GetComponent<TrailRenderer> ();
        float startWidth = trailRenderer.startWidth;
        float endWidth = trailRenderer.endWidth;
        trailRenderer.startWidth = 1f;
        trailRenderer.endWidth = 1f;
        Debug.Log ("Start width: " + startWidth + '\t' + "End width: " + endWidth);

        trailerbaby = GameObject.FindGameObjectsWithTag ("trailerbaby");

    }

    void Update ()
    {
        trailRenderer = gameObject.GetComponent<TrailRenderer> ();
        float startWidth = trailRenderer.startWidth;
        float endWidth = trailRenderer.endWidth;
        Debug.Log ("Start width: " + startWidth + '\t' + "End width: " + endWidth);
        float [] spectrum = AudioListener.GetSpectrumData (1024, 0, FFTWindow.Hamming);
        for (int i = 0; i < numberOfObjects; i++) {
            //Vector3 previousPosition = trailerbaby [i].transform.localPosition;
            trailRenderer.startWidth = Mathf.Lerp (trailRenderer.startWidth, spectrum [i] * 2000, Time.deltaTime * 13000 * 10);
            trailRenderer.endWidth = Mathf.Lerp (trailRenderer.startWidth, spectrum [i] * 2000, Time.deltaTime * 13000 * 10);
            //previousPosition.y = Mathf.Lerp (previousPosition.y, spectrum [i] * 2000, Time.deltaTime * 13000);
            //trailerbaby [i].transform.localPosition = previousPosition;

        }

    }
}

关于c# - 在Unity中使用音频频谱C#脚本更改Trail Renderer的宽度参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47742096/

相关文章:

objective-c - 当铃声静音时,如何防止我的应用程序(使用 AVPlayer)被静音?

c# - WPF PasswordBox 中密码的安全优势不可绑定(bind)?

c# - 使用 JavaScript 函数显示日历

c# - Unity - 当玻璃杯满时进入下一个级别

android - Unity GoogleMobileAdsMediationTestSuite 抛出异常 setAdListener 必须在主 UI 线程上调用

c# - 获取 LineRenderer 的位置

c# - 网络驱动器在启动时不可用

c# - 跨 AppDomain 信令的最高性能

python - 不理解 Python 中主成分分析 (PCA) 的输出

html - IE10 Windows7——音频标签从不播放音频?