Я работаю над игрой в Unity (используя C# 9.0), и я столкнулся с проблемой с методом random.range. Кажется, что независимо от того, что я делаю, я не могу получить C#, чтобы решить, какую перегрузку использовать. Я пробовал много вещей. Вот что у меня есть: < /p>
public void PlayRandOuchAudio()
{
if (ouchAudio == null) return;
int randomIndex = UnityEngine.Random.Range(0, ouchAudio.soundHelpers.Count() - 1);
// pitch/volume variation on hold, not as easy as I thought (you can see what I tried and it still didn't work)
PitchOrVolumeVariation variation = ouchAudio.soundHelpers[randomIndex].pitchOrVolumeVariation;
int pitchRange = Random.Range((float)(-variation.pitchVariation + variation.pitchVariationShift), (float)(variation.pitchVariation + variation.pitchVariationShift));
// same thing for volume
if (ouchAudio.soundHelpers[randomIndex].sound != null)
audioSource.PlayOneShot(ouchAudio.soundHelpers[randomIndex].sound, variation.defaultVolume);
else
print("Tried to play sound " + ouchAudio.soundHelpers[randomIndex].sound + " but it's null.");
}
< /code>
Вот структуры, которые я использовал для справки (очевидно из разных файлов): < /p>
public struct VariableSound
{
internal VarSoundHelper[] soundHelpers;
public VariableSound(VarSoundHelper[] varSounds)
{
soundHelpers = varSounds;
}
public VariableSound(AudioClip[] sounds, PitchOrVolumeVariation[] pitchOrVolumeVariations)
{
int index = 0;
soundHelpers = new VarSoundHelper[sounds.Length];
foreach (var sound in sounds)
{
soundHelpers[index] = new VarSoundHelper(sound, pitchOrVolumeVariations[index]);
index++;
}
}
public static bool operator ==(VariableSound a, VariableSound b) { return a.Equals(b); }
public static bool operator !=(VariableSound a, VariableSound b) { return !a.Equals(b); }
}
public struct VarSoundHelper
{
internal AudioClip sound;
internal PitchOrVolumeVariation pitchOrVolumeVariation;
// was gonna make pitchOrVolumeVariations optional but C# got mad
public VarSoundHelper(AudioClip sound, PitchOrVolumeVariation pitchOrVolumeVariation)
{
this.sound = sound;
this.pitchOrVolumeVariation = pitchOrVolumeVariation;
}
}
public struct PitchOrVolumeVariation
{
internal bool volume;
internal bool pitch;
internal float defaultPitch;
internal float pitchVariation;
internal float pitchVariationShift;
internal float defaultVolume;
internal float volumeVariation;
internal float volumeVariationShift;
public PitchOrVolumeVariation(float defaultPitch = 1, float pitchVariation = 0, float pitchVariationShift = 0, float defaultVolume = 1, float volumeVariation = 0,
float volumeVariationShift = 0, bool forVolume = false, bool forPitch = false)
{
this.volume = forVolume;
this.pitch = forPitch;
this.defaultPitch = defaultPitch;
this.pitchVariation = pitchVariation;
this.pitchVariationShift = pitchVariationShift;
this.defaultVolume = defaultVolume;
this.volumeVariation = volumeVariation;
this.volumeVariationShift = volumeVariationShift;
}
}
< /code>
Изменить: я неправильно понял ошибку и исправил ее, но я все равно хотел бы ответить на мой вопрос (не так срочно). < /p>
Кроме того, эй! Кто понизился!? Надеюсь, это не сурово, если честно, я новичок в переполнении, и это мой первый пост. Я не понимал, что мой пост, очевидно, может быть закрыт за то, что он слишком короткий. Если вы видите это, пожалуйста, подумайте о том, чтобы отменить его (я думаю -1 не плохо для моего первого поста).
Подробнее здесь: https://stackoverflow.com/questions/796 ... es-the-par