我正在使用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/