Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

problema rayos y truenos

Iniciado por Numok, Marzo 01, 2016, 08:15:47 PM

Tema anterior - Siguiente tema
Hola buenas:Tengo el siguiente problema:Estoy haciendo una tormenta con truenos y rayos(los rayos solo se reflejan en el terrain no se ven en el cielo)y el script que utilizo hace de forma aleatoria los segundos entre cada rayo y le mete el destello con cada trueno aleatorio.El problema que tengo es que los destellos estan completamente descoordinados,de hecho al darle play es lo primero que ves y en ningun momento se ponen offAqui os dejo el script en cuestion using UnityEngine;
using System.Collections;
using System.Linq;
using System.Collections.Generic;public class lightningStorm : MonoBehaviour {
    public float lightningInterval; //For setting range of time delays.This is the minimum seconds between lightning bolts. Max is lightningInterval*2    public Light lightningBulb;     //The light in the scene to be ued as lightning(directionaL light works best)
    public float defaultIntensity;     //the normal intensity of the light. this is essentially the off state of a flash.
    public bool isRaining;          //enebles or disables the lightning storm.
    public AudioClip[] thunderRolls;
    public AudioSource[] thunderSources;    void Start () {
        //load thunder audio files from Assets/Resources/thunder/
        thunderRolls = Resources.LoadAll<AudioClip>("thunder/");
            if(thunderRolls.Length < 1){Debug.Log ("Missing Sounds"); }
        //get the directional light that will be used as lightning
        if(lightningBulb == null)
            lightningBulb = GameObject.Find("lightninghBulb").GetComponent<Light>();
        //record the start intensity of the light as the default or off state.
        defaultIntensity = lightningBulb.intensity;
        thunderSources = this.GetComponents<AudioSource>();
                isRaining = true;
        StartCoroutine(thunderStorm());
    }
    IEnumerator thunderStorm () {
        //if it's raining play lightning.
        while(isRaining){            yield return new WaitForSeconds(Random.Range(lightningInterval,(lightningInterval*2))); 
            StartCoroutine(playLightning(BoltDefinition()));
            //StartCoroutine(lightningBolt());
        }    }    //over-complicated version
    //create a lightning bolt definition..run it through a player
    //BoltOfLightning<interval,intensity>    public Dictionary<float, float> BoltDefinition(){
        //boltDefinition<interval,intensity>
        Dictionary<float, float> boltDefinition = new Dictionary<float, float>();
        //Random number of flashes that this bolt of lightning displays
        int thisBoltFreq = Random.Range(1, 10);
        //create a set of values for each flash
        for(int i=0;i<thisBoltFreq;i++){
                                          //<interval,intensity>
            boltDefinition.Add(Random.Range (0.001f,0.1f), Random.Range(0, 100));
        }
        //thunderscore of this bolt.
        Debug.Log("ThunderScore = " + boltDefinition.Values.Sum(x => x).ToString());
        //BoltOfLightning<interval,intensity>
        return boltDefinition;
    }
    public IEnumerator playLightning(Dictionary<float,float> thisBoltDef){        //thunderscore of this bolt.
        //Total all multipliers for the bolt to get a VERY rough score for the intensity of the bolt of lightning
        //use this to choose a thunder audio.clip
        float thisThunderScore = thisBoltDef.Values.Sum(x => x);        //THE FLASH
        foreach(KeyValuePair<float,float> boltParam in thisBoltDef){
              //<interval,intensity>
            //set the intensity of the lightningBulb in random flashing pattern.
            lightningBulb.intensity = defaultIntensity * boltParam.Value;
            //wait for random interval
            yield return new WaitForSeconds(boltParam.Key);
            //reset light to default/off
            lightningBulb.intensity = defaultIntensity;
        }        //TODO: Thunder whould be timed with a delay.
        //The delay should be calculated using the observerDistance/speedOfSound
        //TimeDelay = AudioListener.Vector3.Distance/343.2 meter per sec           //speed of sound  
        //343.2 metres per second (1,126 ft/s).
        //1,236 kilometres per hour (667 kn; 768 mph)        //choose the clip based on the thunderscore.
        //average thunder with a chance of distant rolling thunder added in
        if(thisThunderScore > 100 && thisThunderScore < 399){             thunderSources[1].GetComponent<AudioSource>().PlayOneShot(thunderRolls[2]);
            thunderSources[0].GetComponent<AudioSource>().PlayOneShot(thunderRolls[0],0.5f);
            //random chance is decided by creating a random number...
            float randChance = Random.Range (1, 10);
            //...and checking if it is an even number. Qucik. Dirty. Works.
            if(randChance%2==0){
                //distant thunder
                Debug.Log("added some oompf");
                thunderSources[0].GetComponent<AudioSource>().PlayOneShot(thunderRolls[0],1.5f);            }
            //average thunder
            
        }
        //LOUD THUNDER
        if(thisThunderScore >= 400){            thunderSources[1].GetComponent<AudioSource>().PlayOneShot(thunderRolls[1]);
            yield return new WaitForSeconds(0.5f);
            thunderSources[0].GetComponent<AudioSource>().PlayOneShot(thunderRolls[0]);
        }
        //distant rolling thunder
        if(thisThunderScore <= 99 && thisThunderScore > 20) {
            //normal volume
            yield return new WaitForSeconds(1);
            thunderSources[1].GetComponent<AudioSource>().PlayOneShot(thunderRolls[2]);
            thunderSources[0].GetComponent<AudioSource>().PlayOneShot(thunderRolls[0],0.3f);
            }else{
                //low volume, very faint thunder
                yield return new WaitForSeconds(2);
                thunderSources[1].GetComponent<AudioSource>().PlayOneShot(thunderRolls[2],0.5f);
            }
    
    }     /// <summary>
    /// Lightnings the bolt. 
    /// Quick And Dirty Version.
    /// create a bolt of lighting by flashing the lightningLight x times with y time between fashes.
    /// set a random interval for each flash
    /// set a reandom intensity multiplier for each flash
    /// set the intiensity of the light with intensityMultiplier
    /// setBackTo DefaultIntensity
    /// /// 
    /// </summary>    public IEnumerator lightningBolt(){
        
        //how many flashes
        int flashCount = Random.Range(1, 10);
        int thisFlash = 0;
        
        while(thisFlash < flashCount){
            
            lightningBulb.intensity = defaultIntensity * Random.Range(0, 100);
            yield return new WaitForSeconds(Random.Range (0.001f,0.1f));
            lightningBulb.intensity = defaultIntensity;
            thisFlash++;
        }    }} Muchas gracias de antemano

Marzo 01, 2016, 10:04:15 PM #1 Ultima modificación: Marzo 01, 2016, 10:05:57 PM por Arthure
Que se supone que debe hacer la gente con ese script ... la intencion es que lo modifiquen a tu gusto ?en programacion hay dos opciones : aprender programacion y despues hacer tus propios scripts, o bien copiar scripts de internet ... las dos opciones son muy licitas, aunque con la segunda estas tremendamente limitado.Lo que no es viable es que todos los que escojan la segunda opcion, luego entren y posteen un script copiado pidiendo que se lo modifiquen para que se lo dejen a su gusto ... aunque igual solo llevara 10 min de "trabajo", teniendo en cuenta que cada mes hay 20 o 30 personas como tu, al final suman muchas horas de trabajo gratis que se pretende esten realizandote una tarea que se supone es tuya. Pero luego se nos llena la boca diciendo que los salarios son una mierda xDNo hay que ser tan egoista, no por una persona sino en general. En cualquier caso, suerte

@Arthure Opino exactamente lo mismo que vos... Aunque de todos modos le voy a explicar por que llegamos a esta conclusión.. Primero, la sintaxis del código no esta escrita por una persona que empezó a programar hace 2 días.Segundo, la implementacion para tal sistema esta totalmente mal diseñada y por ende implementada, haciendo uso de cosas innecesarias. Tercero, si el código fuese tuyo, solucionar el error te costaría en 2 minutos.Analizando las tres opiniones críticas, todo concuerda, el código tiene un nivel básico-medio, por lo que se ve es el típico spaghetti, algo que generalmente sucede cuando aprendes en PC antes de utilizar un papel y lápiz. También se nota falta de planeamiento, algo que ocurre muy a menudo por la falta de conocimiento teórico. Un consejo particular. 
Si quieres Crear videojuegos elige qué área del desarrollo te interesa, investiga y trata de centrarte solo en este. Como muchos de los usuario del foro nos encontramos encerrados en una o dos personas, quiero decir, un programador y un grafista, o dos programadores, esto conlleva a dos alternativas, contratar un personal que cumpla con lo que falta dentro del desarrollo, o alargar el desarrollo enfrentando con tus conocimientos y limitaciones. Hago hincapié también, en el planeamiento de cualquier proyecto, a muchos nos pasas de enfrentarnos frente a cualquier problema directamente picando código, algo realmente inútil. ¿Por qué?, primero por que deberias saber como todo funciona y por lo menos haber realizado lo mismo unas 10 veces para luego hacerlo de memoria. Como un modelador gráfico, empieza copiando modelos, luego se guia con Blueprint y por último puede dejar volar su imaginación, utilizando conceptos asimilados y experiencia ganada a lo largo del aprendizaje, que por cierto dia a dia vamos adquiriendo.No vuelvo a contestar otro tema con lo mismo de siempre... Si necesitas ayuda desglosa tu problema y busca parte por parte en que estas fallando, programalo tu mismo, NO USAR CÓDIGO DE TERCEROS ese es el camino al fracaso.  

cuando lei que dices que es lo primero que aparece y que jamas se pone off, baje tantito y vi dos cosas isRaining y      StartCoroutine(thunderStorm());una busqueda rapida en el script te das cuenta que jamas se pone false, entonces la logica te dice que falta mas script que conlleva a un ecosistema sobre este sistema de clima que tienes,entonces mi buen por mas que uno quisiera ayudarte estas haciendo las cosas de la manera mas dificil que te lo puedas imaginar, paso 1 :aprende a programar en C# no importa que sea basico, almenos que comprendas la sintaxis, logica y etc.paso 2:leete la documentacion de unity3d, si bien es algo larga es super necesario almenos los temas basicos, date una vuelta por la pagina oficial y en la seccion de tutoriales esta lo mas importante  saludos 

Marzo 02, 2016, 07:12:53 PM #4 Ultima modificación: Marzo 02, 2016, 07:21:57 PM por Numok
Muchas gracias por las respuestasAl primero que contesto no aporta nada constructivo y ademas o me explique mal o no entendieron el hilo y lo teneis muy facil,si no quereis ayudar a la gente no contesteis,contarme que 20 personas entran al foro al mes para pedir que se modifiquen scripts no me interesa,y tu si no quieres ayudar lo tienes muy facil,no contestes y punto,de todas maneras gracias supongo que andaras "quemado"por alguna razonNo busco modificar el script,el script hace lo que describi pero por alguna razon los destellos de luz nunca se coordinan con los truenosA los ultimos que contestaron muchas gracias por las respuestas lamentablemente solo estoy yo en el proyecto y abruma la cantidad de cosas que tengo que hacer sin meterme ya con el tema de scripts,en breve empezare a meterme con javascript o C#, de todas maneras seguire investigando pq no hace lo que tendria que hacer el dichoso script o donde tengo que poner el off ya que me comentas que no esta en el scriptEn el tema de scripts estoy bastante verde pero en todo lo demas poco a poco lo voy teniendo mas claro,hace 48 horas que empece con UnityMi intencion al crear este hilo era que alguien que supiera mas que yo de scripts(que no es dificil) me guiara y me contestara pq el script no hace lo que tendria que hacer,que vuelvo a repetir,no es una modificacion de script,en teoria el script tenia que hacer lo que comente Muchas gracias de nuevo

Etiquetas: