gpt4 book ai didi

c# - 使用 Unity 中的 slider 更改数组中一个 AudioSource 的音量

转载 作者:行者123 更新时间:2023-12-05 02:46:40 24 4
gpt4 key购买 nike

我正在尝试使用 slider 控制数组中第一个音频源的音量。问题是它告诉我 audiosources[0].volume 中没有“音量”的定义。该脚本位于 Brackeys 教程的 AudioManager 中:Tutorial .

//Volumeslider
public void VolumeSlider(float newVolume)
{
Component[] audiosources;
audiosources = GetComponents(typeof(AudioSource));
audiosources[0].volume = newVolume;

错误:“Component”不包含“volume”的定义,并且找不到接受“Component”类型的第一个参数的可访问扩展方法“volume”(您是否缺少 using 指令或程序集引用? ) [程序集-CSharp]csharp(CS1061)

这是我的第一个问题。

最佳答案

即使您已使用 GetComponents 正确检索了所有 AudioSource 组件,但由于数组的类型是 Component[],这意味着数组的每个单独元素都是属于组件

Component 没有体积定义。想想像 AnimatorMeshFilter 这样的东西。这些也是 Component 的子类,因此可以将它们分配给数组中的元素。如果您尝试访问他们的 volume 属性会发生什么?

您应该做的是尽可能具体 - 这就是像 C# 这样的强类型语言的全部意义所在。你可以这样做:

var audioSources = GetComponents<AudioSource>();
audioSources[0].volume = newVolume;

主要区别在于使用“通用”版本的GetComponents(带<尖括号>的版本。原因是,您实际上得到了一个数组,AudioSource[] 的正确类型,而不是基本的 Component 类型,其中 A) 没有您想要的字段,并且 B) 需要转换为 AudioSource 才能按您的需要使用它.

我做的其他改进:变量名的驼峰命名法,推断的变量类型(var,所以如果你以后需要使用另一种组件,你只需要在一个地方改变它。如果你鼠标在 var 上,它会告诉您该类型实际上是 AudioSource[]),赋值与声明在同一行(减少困惑。)

关于c# - 使用 Unity 中的 slider 更改数组中一个 AudioSource 的音量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65375518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com