c# - 如何在Unity 5中使用C#按比例更改3D对象的比例和音频源的半径?

标签 c# audio unity3d unity5

我正在使用Array在空间中随机乘以3D对象,因此我得到了很多漂亮的对象,它们随机地沿y,x和z轴 float 。
这个对象还有一个带有声音的音频源,这意味着在应用随机数组定位后,我也会得到带有不同音频源的不同对象。

问题是我也在更改这些对象的比例,它的工作效果非常好,但是“音频源”的大小/比例/半径根本没有改变。

如何更改对象的比例并同时更改音频源的尺寸/比例/半径,以使尺寸相等或成比例地匹配?

我在这里看,但我不知道。
https://docs.unity3d.com/ScriptReference/AudioSource.html

这是我正在使用的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class multipleObjectsGrandes : MonoBehaviour {

public GameObject prefabGrandes;

public GameObject[] gos;
public int cantidad;
public float minScaleObj;
public float maxScaleObj;


void Awake()
{
    gos = new GameObject[cantidad];
    for(int i = 0; i < gos.Length; i++)
    {

        //Position
        Vector3 position = new Vector3(Random.Range(-40.0f, 40.0f), Random.Range(-40.0f, 40.0f), Random.Range(-40.0f, 40.0f));
        GameObject clone = (GameObject)Instantiate(prefabGrandes, position, Quaternion.identity);

        //Scale
        clone.transform.localScale = Vector3.one * Random.Range(minScaleObj, maxScaleObj);

        //Rotation
        clone.transform.rotation = Quaternion.Euler(Random.Range(0.0f, 360.0f), Random.Range(0.0f, 360.0f), Random.Range(0.0f, 360.0f));

        gos[i] = clone;
    }
  }
}

最佳答案

这是我用来乘法对象的代码:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class multipleObjectsGrandes : MonoBehaviour
    {

    public GameObject prefabGrandes;

    public GameObject[] cuerpos;
    public int cantidad;
    public float minScaleObj;
    public float maxScaleObj;

    public float escalaMax;

    void Awake ()
    {
        cuerpos = new GameObject[cantidad];
        for (int i = 0; i < cuerpos.Length; i++) {

            //Position
            Vector3 position = new Vector3 (Random.Range (-40.0f, 40.0f), Random.Range (-40.0f, 40.0f), Random.Range (-40.0f, 40.0f));

            GameObject clone = (GameObject)Instantiate (prefabGrandes, position, Quaternion.identity);

            //Scale
            clone.transform.localScale = Vector3.one * Random.Range (minScaleObj, maxScaleObj);

            //Rotation
            clone.transform.rotation = Quaternion.Euler (Random.Range (0.0f, 360.0f), Random.Range (0.0f, 360.0f), Random.Range (0.0f, 360.0f));

            escalaMax = clone.transform.localScale.x;

            //Debug.Log(escalaMax);

            }
        }
    }

当我在控制台中调试“escalaMax”时,此处一切正常。

变量“escalaMax”是我要传递到另一个脚本的变量,该脚本位于我正在乘法的对象中,该对象具有附加的audioSource。这是脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent (typeof(AudioSource))]

public class AudioRandomPitch : MonoBehaviour
{

    public float startingPitch = 1;
    public float minPitchRandom = 0;
    public float maxPitchRandom = 0;
    AudioSource audio;

    public float audioScale;

    void Start ()
    {
        startingPitch = Random.Range (minPitchRandom, maxPitchRandom);
        audio = GetComponent<AudioSource> ();
        audio.pitch = startingPitch;

        GameObject theMultiplicator = GameObject.Find ("Multiplicador_deCuerpos");
        multipleObjectsGrandes multiplicatorScript = theMultiplicator.GetComponent<multipleObjectsGrandes> ();
        multiplicatorScript.escalaMax = audioScale;

        //this is not working
        audio.maxDistance = audioScale;

        Debug.Log(audioScale);



    }
}

在这里,我首先将来自其他脚本escalaMax的值保存在新变量audioScale中。
现在的问题是当我尝试将audioScale值传递给audio.maxDistance var时。

我知道我非常亲密,但是如您所见,我不是一个非常好的程序员,我可能做错了一些愚蠢的事情...:/

谢谢您的帮助!

关于c# - 如何在Unity 5中使用C#按比例更改3D对象的比例和音频源的半径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43415362/

相关文章:

c# - NuGet 更新后的 FileLoadException

ios - Swift 3 - 关闭角标(Badge)、警报、声音

java - 无法在 Unity C# 中获取 Activity 的实例

java - 如何更改音量/更改AudioClip

javascript - HTML5 音频是否有 oncomplete 事件?

c# - 调整旋转方面的正确方法

android - Unity 中的 ARCore Android - 应用程序未启动

C# WPF 应用程序启动非常慢

c# - 向接口(interface)属性添加约束

c# - 发送 String[][] 到 Web 服务