Jump to content
Cerpion

Creación de base de datos – Muebles.

Recommended Posts

Hola a todos, estoy tratando de desarrollar una base de datos de muebles (soy novato con ScriptableObject y base de datos).

Tengo una base de datos para los diferentes muebles.

[CreateAssetMenu(fileName = "Furnished", menuName = "Furnished/Create Furniture", order = 1)]
public class FurnishedConfig : ScriptableObject
{
    public Image image;
    public string nameFurniture;
    public int healtFurniture;
}

 

Tengo una clase para definir el material del mueble, si es madera, metal o es un cristal.

public class FurnitureMaterial : MonoBehaviour
{
    public enum Category
    {
        Wood,
        Metal,
        Cristal
    };
}

 

Y por último tengo otro script en donde creo opciones para asignar un sistema de partículas y varios clips de audio.

[CreateAssetMenu(fileName = "ParticleSettings", menuName = "Furnished/Create Particle Effect settings", order = 2)]
public class FurnitureEffectsDatabase : ScriptableObject
{
    public List<FurnitureEffects> particleEffect = new List<FurnitureEffects>();
}

[System.Serializable]
public class FurnitureEffects 
{
    public string nameMaterial;
    public FurnitureMaterial.Category idMaterial;
    public ParticleSystem particleDamage;
    public AudioClip[] effetcSound;
}

 

El funcionamiento es simple. Necesito que cuando el personaje le pegue a mueble, este ejecute su partícula y un audio aleatorio.

El problema es que no se como llamar a la base de datos que guarda sonidos y efectos de partícula desde la base de datos del mueble.

 

Explicando de manera más visual:

Tengo dos listas que guardan partículas y clip de audio.

https://ibb.co/GsqhVkh

 

Y la base de datos de los muebles actualmente se ve así

https://ibb.co/VQbXkCb

 

Pero quiero acceder a las configuraciones que guardan partículas y audio a través de un enum, de esta forma.

https://ibb.co/thMd6Wy

 

Así puedo asegurarme de que cuando el personaje le pegue al objeto cama, puedo acceder a sus valores, hacer daño al objeto que ejecute las partículas y el sonido que haya asignado en effects.

 

Así que mis preguntas son:

·         no sé de qué forma puedo acceder de una base de datos a otra, y usar un enum para visualizarlo.

·         No se si usar tantos scripts está bien, por favor corríjanme si algo está mal :c

 

Espero haberme echo entender 🙂

De antemano muchas gracias por leer.

 

Edited by Cerpion

Share this post


Link to post
Share on other sites

Esto lo puedes hacer con eventos para evitar el acople y referencias circulares. 

1 - Deberías tener un BUS de eventos específicos.

2 - Crear un controlador por ej. SoundToFurnitureEffectsDatabaseController donde suscribas los eventos necesarios del bus.

3 - Disparar los Eventos del bus.

En tu caso el esquema se podría ver así.

image.png

El evento HitFurnitureEvent deberá tener su propio payload donde iría la información del Furniture y la de la colisión.

Esto puede ser un poco más complejo y mi resumen es muy minimalista, te comparto una pequeña demostración que realice en GitHub para esto. 

https://github.com/francoe1-gamedev/demo-event-architecture

 

Share this post


Link to post
Share on other sites

¡Muchas gracias frnacoe1! 🙂 el sistema esta genial estoy tratando de implementarlo, veo que esta optimizado y funciona para un montón de cosas !

  • Like 1

Share this post


Link to post
Share on other sites

×
×
  • Create New...