Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

293
Vistas
Unity: problema con la matriz AudioClip

Estoy tratando de hacer un reproductor de audio en Unity. Primero creé un ResourceManager, que tiene una matriz AudioClip[] .

 public class ResourceManager : MonoBehaviour { public AudioSource audioSrc; public AudioClip[] clips; private int trackNum = 0; public void Awake() { audioSrc = GetComponent<AudioSource>(); audioSrc.Stop(); ...omitted... public void LoadClip() { audioSrc.clip = clips[trackNum]; } }

Para que aparezcan en el cuadro de arrastrar y soltar Clips .

ingrese la descripción de la imagen aquí

Sin embargo, quiero que la matriz AudioClip sea estática en ResourceManager , de modo que otras secuencias de comandos (por ejemplo, PlayPause.cs ) puedan acceder a los clips forma estática (a través de llamadas a funciones). Pero el problema es que una vez que hago los clips estáticos, el arrastrar y soltar desaparece. .

¿Hay alguna manera de arreglar eso? ¿O hay algunos mejores patrones de diseño? Gracias.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Puede, por ejemplo, simplemente hacer

 public class ResourceManager : MonoBehaviour { ... // This is the one in the Inspector // Usually I keep the Inspector private and only provide public access // where needed via properties [SerializeField] private AudioClip[] clips; // This will be set in Awake to the ones from the Inspector // readonly for others, only this class can assign it public static AudioClip[] Clips { get; private set; } public void Awake() { Clips = clips; ... } }

La alternativa sugerida es hacer que ResourceManager sea el llamado singleton como, por ejemplo,

 public class ResourceManager : MonoBehaviour { // Here you store your own instance reference // and provide public readonly access public static ResourceManager Instance { get; private set; } [SerializeField] private AudioClip[] clips; public AudioClip[] Clips => clips; ... public void Awake() { // Make sure only one instance exists at a time if(Instance && Instance != this) { Destroy(gameObject); return; } _instance = this; // optional: Don't destroy this instance when the scene is switched // Careful: Make sure this applies also to the AudioSource instance! // For now I assume it is either attached to this object or a child // if not simply do the same DontDestroyOnLoad on it as well DontDestroyOnLoad (this.gameObject); ... } public void LoadClip() { audioSrc.clip = clips[trackNum]; } }

Y luego acceda a todas partes ReaourcesManager.Instance.Clips


O una alternativa integrada al singleton es usar FindObjectOfType para que cualquier otra secuencia de comandos en la Escena pueda simplemente acceder

 FindObjectOfType<ResourcesManager>().clips

sin que tengas que cambiar nada ;)

Excepto como dije que lo haría

 [SerializeField] private AudioClip[] clips; public IReadonlyList<AudioClip> Clips => clips;

dependiendo un poco, por supuesto, de qué es exactamente lo que quiere hacer con los clips, pero de esta manera la matriz no puede ser alterada por ningún otro script

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda