Unity 3D音频可视化项目:Vector3转Float失败求解决
解决Unity C#音频可视化三轴缩放的类型转换错误
错误原因
你修改后的代码里,这一行存在类型不匹配问题:
this.transform.localScale = new Vector3(this.transform.localScale, baseHeight + _spectrumBand * height, this.transform.localScale);
Vector3的构造函数需要传入三个float类型的参数,但你传入的是整个transform.localScale(Vector3类型)和计算后的baseHeight + _spectrumBand * height(Vector3类型),C#无法自动将Vector3转换成float,因此报错。
两种解决方案
方案1:完全均匀缩放(三个轴同步同比例缩放)
如果你的需求是三个轴按照同一比例缩放,不需要每个轴单独设置基础值和幅度,可以保持baseHeight和height为float类型,直接计算统一的缩放值应用到三个轴:
using System.Collections; using System.Collections.Generic; using UnityEngine; using static SAP.SapVars; public class GrowSap : MonoBehaviour { private RedactedForPrivacy sap; public SapSetBand growBand; public int band; public float height; // 控制整体缩放幅度 public float baseHeight; // 控制整体基础缩放值 private float _spectrumBand; void Start() { sap = RedactedForPrivacy._SapInstance; } void Update() { switch(growBand.bandType) { case BandType.Raw: _spectrumBand = sap.GetSpectrumBand(growBand.source, growBand.spectrum, band); break; case BandType.Smooth: _spectrumBand = sap.GetSpectrumBandSmooth(growBand.source, growBand.spectrum, band); break; case BandType.Trigger: _spectrumBand = sap.GetSpectrumBandTrigger(growBand.source, growBand.spectrum, growBand.trigger, band); break; } // 计算统一缩放值,应用到X/Y/Z三轴 float targetScale = baseHeight + _spectrumBand * height; transform.localScale = new Vector3(targetScale, targetScale, targetScale); } }
方案2:三轴独立设置基础值和缩放幅度
如果需要每个轴使用不同的基础缩放值和幅度(比如X轴基础1、Y轴基础2、Z轴基础3),可以保留baseHeight和height的Vector3类型,分别计算每个轴的float值:
using System.Collections; using System.Collections.Generic; using UnityEngine; using static SAP.SapVars; public class GrowSap : MonoBehaviour { private RedactedForPrivacy sap; public SapSetBand growBand; public int band; public Vector3 height; // 每个轴单独的缩放幅度 public Vector3 baseHeight; // 每个轴单独的基础缩放值 private float _spectrumBand; void Start() { sap = RedactedForPrivacy._SapInstance; } void Update() { switch(growBand.bandType) { case BandType.Raw: _spectrumBand = sap.GetSpectrumBand(growBand.source, growBand.spectrum, band); break; case BandType.Smooth: _spectrumBand = sap.GetSpectrumBandSmooth(growBand.source, growBand.spectrum, band); break; case BandType.Trigger: _spectrumBand = sap.GetSpectrumBandTrigger(growBand.source, growBand.spectrum, growBand.trigger, band); break; } // 分别计算三轴的目标缩放值 float scaleX = baseHeight.x + _spectrumBand * height.x; float scaleY = baseHeight.y + _spectrumBand * height.y; float scaleZ = baseHeight.z + _spectrumBand * height.z; transform.localScale = new Vector3(scaleX, scaleY, scaleZ); } }
内容的提问来源于stack exchange,提问作者Jeremy Romanowski
相关产品推荐
相关产品推荐

