Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Temas - Ítizhor

#1
General Grafistas / Shaders en Unity 4.6
26 de Febrero de 2016, 12:14:14 AM
Hola:

Veréis, llevo ya varios días tratando de solucionar un problemilla con un shader pero no consigo averiguar cómo resolverlo. Además, como dificultad añadida tengo que por motivos de compatibilidad utilizo Unity en su versión 4.6, por lo que la documentación oficial, ya actualizada, no me sirve.

El caso es que quiero que, al finalizar el nivel de juego, la pantalla se cubra con un shader rojo oscuro y semitransparentado, sobre el que aparecen la puntuación obtenida y las opciones de volver a jugar o salir. El problema es que el shader se renderiza mucho más oscuro de lo normal (de como lo veo en Scene). Siguiendo un tutorial de YouTube, y a cuyo autor supongo que no le afectaba este "fallo" puesto que su shader era negro, elegí el tipo Transparent/Diffuse. He estado probando otros varios, entre ellos algunos pocos con los que pude dar en Unity Answers pero nada.

¿Alguien tiene alguna sugerencia? Lo cierto es que ya empiezo a desesperar, no sé dónde encontrar documentación y me parece un fallo muy, muy tonto pero que me fastidia bastante la presentación  :-[. Y si he venido a Stratos es precisamente por eso: vengo aquí cuando todo lo demás falla. Nunca me he ido del foro sin una solución sencilla y, sobre todo, rápida. Así que vuelvo implorando el consejo de los sabios que habitan tras estas pantallas. ¡Ayuda!

Gracias de antemano,
Ítizhor.
#2
¡Hola!

Veréis, desarrollando mi segundo videojuego para Android he llegado a la necesidad de repartir cuatro números (0, 1, 2 y 3, los cuatro primeros elementos de un array) de forma aleatoria y sin que ninguno se repita. Estuve mirando cómo hacerlo y finalmente me decanté por crear un array auxiliar que fuese guardando todos los valores que ya han salido para, al ir a obtener un nuevo número aleatorio, comprobar si el saliente ya ha aparecido y, en tal caso, repetir la búsqueda. Tras terminar, un bucle for se encarga de "vaciar" los elementos del array para el siguiente uso. Para ello he creado una función, que ha quedado tal que así:

int NonRepeatedRandomNumber ()
{
   do
   {
      randomCS = Random.Range (0, 3);
   }
   while (randomCS == positionedCCSS[0] || randomCS == positionedCCSS[1] || randomCS == positionedCCSS[2]);

   return randomCS;
}


Todas las variables, randomCS (el número aleatorio buscado en cada operación) y positionedCCSS[] (el array auxiliar) están declarados fuera de la propia función, al inicio del script. Huelga decir que ambas son de tipo int. También cabe comentar que el bucle for que vacía el array auxiliar tampoco está dentro de la función.

El caso es que he ido comprobando poco a poco el código, comentando distintas partes de forma secuencial para eliminar posibles fuentes de error y mi problema solo aparece cuando entra en juego la función: Unity se congela, como cuando entra en funcionamiento un bucle infinito (lo que me lleva a pensar que puede ser algo relacionado con el bucle do-while, aunque no consigo ver qué).

Un saludo y gracias de antemano.
#3
General Programadores / Problema al compilar
28 de Agosto de 2015, 01:29:46 PM
Hola, introduzco el tema en esta categoría porque no encuentro otra más apropiada, dado que el tema no es exactamente de programación. Aun así, creo que es donde mejor encaja.

Pues bien, tras 3-4 meses de intenso trabajo, mi primer videojuego (un casual 2D medianamente sencillo para Android) está por fin terminado. Ahora bien, a la hora de compilar me salta este error por consola, lo que me impide obtener la APK y poder publicar mi juego:

Error building player: Win32Exception: ApplicationName='javac.exe', CommandLine='-bootclasspath "D:/Android SDK Tools/platforms/android-22\android.jar" -d "C:\Users\Public\Documents\Unity Projects\[nombre del proyecto]\Temp\StagingArea\bin\classes" -source 1.6 -target 1.6 -encoding UTF-8 "com\google\android\gms\R.java" "com\google\example\games\basegame\utils\R.java" "com\google\example\games\mainlibproj\R.java" "com\[nombredelgrupo]\[nombredelproyecto]\R.java", CurrentDirectory='C:\Users\Public\Documents\Unity Projects\[nombre del proyecto]\Temp\StagingArea\gen'

Solo por si es de valor saberlo, he introducido funciones sociales del servicio de juegos de Google Play (un marcador y varios logros). En cuanto al SDK de Android y el Jar de Java, los he actualizado esta misma mañana a la última versión disponible. ¿Alguien tiene alguna idea de cómo solucionar mi problema? Ya he preguntado también en otro sitio pero no han sabido ayudarme, o no por ahora, al menos. Si acudo a Stratos es porque realmente lo necesito y tengo una muy buena experiencia con los consejos que recibo aquí. ¡Strateros, a mí!

Gracias de antemano ^-^,
Ítizhor.
#4
¡Hola!

Veréis, llevo varias semanas desarrollando un juego para Android y una de las últimas funcionalidades que tengo que añadir es el multitouch, para poder arrastrar un objeto y pulsar un botón a la vez. El caso es que por más que corrijo y reviso el script, no consigo que funcione. Os dejo aquí el código entero:


using UnityEngine;
using System.Collections;

public class MultitouchController : MonoBehaviour
{
   public int touches = Input.touchCount;

   public LayerMask buttonLM;
   public LayerMask spaceshipLM;
   
   public Transform spaceship;
   public GameObject touchCircleExternal;
   public GameObject touchCircleInternal;

   // Update is called once per frame
   void Update ()
   {
      if (touches > 0)
      {
         for (int repetition = 0; repetition < touches; repetition++)
         {
            Touch touch = Input.GetTouch (repetition);

            Ray touchRay = camera.ScreenPointToRay (touch.position);
            RaycastHit hit;

            if (Physics.Raycast (touchRay, out hit, buttonLM))
            {
               if (touch.phase == TouchPhase.Began)
               {
                  NotificationCenter.DefaultCenter ().PostNotification (this, "Shoot");
               }
            }

            if (Physics.Raycast (touchRay, out hit, spaceshipLM))
            {
                if (touch.phase == TouchPhase.Began)
               {
                  touchCircleExternal.renderer.enabled = false;
                  touchCircleInternal.renderer.enabled = false;
                  touchCircleExternal.animation.enabled = false;
                  touchCircleInternal.animation.enabled = false;
               }

               if (touch.phase == TouchPhase.Moved || touch.phase == TouchPhase.Stationary)
               {
                  spaceship.position = new Vector2 (spaceship.position.x + touch.position.x, spaceship.position.y + touch.position.y);
               }

               if (touch.phase == TouchPhase.Ended)
               {
                  touchCircleExternal.renderer.enabled = true;
                  touchCircleInternal.renderer.enabled = true;
                  touchCircleExternal.animation.enabled = true;
                  touchCircleInternal.animation.enabled = true;
               }
            }
         }
      }
   }
}


Como información de interés decir solo que el script está colocado en la cámara, y que ambos colliders (de la capa buttonLM y de la spaceshipLM) son 3D, para poder ser afectados por el Ray.

Saludos y gracias de antemano,
Ítizhor.
#5
¡Hola!

Veréis, llevo ya varias semanas rompiéndome la cabeza con lo mismo, y por más que busco, nada. El caso es que tengo un objeto que empieza con una animación, y la idea es que al entrar en contacto con otro en particular salte (cambie) una variable booleana en el Animator y, suponiendo el estado "true" al que cambia la condición de transición, cambiar la animación.
Básicamente: colisión de trigger -> cambio de booleano -> transición de animación.

El script es el siquiente:

using UnityEngine;
using System.Collections;

public class Explosion : MonoBehaviour
{
   Animator explosion;

   // Connect to the animator
   void awake ()
   {
      explosion = GetComponent<Animator> ();
   }

   // Detect the impact
   void OnTriggerEnter2D (Collider2D other)
   {
      if (other.gameObject.tag == "Missile")
      {
         Debug.Log ("Set explosion");
         explosion.SetBool ("Impact", true);
         // Explosion sound
         Destroy (other.gameObject);
      }
   }
}


La consola reporta el "Set explosion" del Debug.Log, así que queda confirmado que sí se detecta la colisión con el trigger. Ahora bien, al ejecutar explosion.SetBool ("Impact", true); (siendo "Impact" la variable del Animator) me sale el error

NullReferenceException: Object reference not set to an instance of an object
Explosion.OnTriggerEnter2D (UnityEngine.Collider2D other) (at Assets/Scripts/Explosion.cs:20)
.

He buscado tanto sobre el error en concreto como sobre temas como el uso de animaciones, pero sigo igual de encasquillado. Se supone que estoy haciendo referencia a algo que no existe... pero no entiendo por qué  ^_^'.
¿Alguna sugerencia?

Muchas gracias de antemano,
Ítizhor.
#6
General Audio / Derechos de autor de canciones versionadas
14 de Mayo de 2015, 01:51:32 PM
Buenos días.

Tenía en mente producir un pequeño tráiler para un proyecto, y quería acompañarlo de una versión que he encontrado en YouTube de "Yellow Flicker Beat" de Lorde. (Tengo pensado vender el proyecto a bajo precio en alguna plataforma como Steam, pero el tráiler sería público y gratuito, obviamente; solo por dar más detalles).

El caso es que he estado mirando y, como siempre que busco sobre el tema, acabo casi con más dudas que al principio. Según he leído, al ser una cover técnicamente no se están violando los derechos del autor (siempre y cuando los sonidos no sean idénticos a los de la canción original, y bla, bla, bla), puesto que no es su producto. Eso sí, también he visto que se pueden buscar "puertas traseras" en la legislación que no concierne estrictamente a la autoría artística para sacar tajada al presunto infractor. Pero si la misma cover está en YouTube sin problemas, ¿no debería yo poder utilizarla igualmente sin trabas? Por si es necesario, si no me equivoco, la discográfica de Lorde es Universal Music Group.

¿Sabéis si podría utilizar la versión, o dónde buscar más información al respecto?

Gracias de antemano,
Ítizhor.
#7
Buenos días.

Estoy desarrollando un sencillo juego de plataformas en el que eres una nave espacial que ha de ir abriéndose paso a través de un traicionero mar de asteroides, Pues bien, necesito que la colisión mediante void OnTriggerEnter2D diferencie si el objeto colisionado es o no un asteroide. Así, el fragmento de código es el que sigue (siempre en C#):

// Detect collisions
void OnTriggerEnter2D (Collider2D other)
{
   if (other.gameObject.tag == "Asteroid")
   {
      Debug.Log ("if reproduces");
      currentLifes--;
      // Crash sound
      Destroy (other.gameObject);
   }
   else
   {
      Debug.Log ("else reproduces");
      NotificationCenter.DefaultCenter ().PostNotification (this, "RecoverAmmunition");
      Destroy (other.gameObject);
   }
}

Los asteroides están marcados con una etiqueta "Asteroid" (sí, he comprobado que la he indicado bien), y esos Debug son para revisiones de código. Así mismo, el NotificationCenter del else te redirige a otro script para regenerar un misil de munición.

Lo que ocurre es que todo se ejecuta correctamente sin reportar ningún tipo de error por consola, pero cuando la nave colisiona con otro objeto, sea o no sea este un asteroide, salta a ejecutar directamente el else.

Deduzco que si no da errores y ejecuta el else es porque no reconoce como verdadera la condición del if, lo que me lleva a la pregunta que tanto me trae de cabeza:
¿Estoy indicando bien la etiqueta?
Del mismo modo, ¿existe alguna otra forma de dar a entender al código la diferenciación de colisiones?

Gracias,
Ítizhor.
#8
Hola, veréis, estoy con un proyecto de desarrollo para Android y necesito introducir un input que me permita tocar y arrastrar el dedo sobre la pantalla para mover un objeto. El caso es que solo encuentro información sobre el pulso individual (un toque) y el multitouch, pero no sobre el arrastre.

He estado leyendo la sección correspondiente en el Scripting API de Unity y dando un par de vueltas por Google y YouTube pero nada, creo que ni siquiera sé cómo acercarme a la solución (¿será alguna clase de variación del toque individual, por ejemplo?).

Saludos y gracias.
#9
General Programadores / Ayuda con un script en Unity 4.6
05 de Abril de 2015, 02:26:16 PM
DUDA RESUELTA

¡Buenas!

Veréis, estoy envuelto en un proyecto de Unity desde hace algo más de un mes (el primero) y me he atascado con un script en concreto. Es un 2D runner, y estoy programando código para que una baldosa aparezca cada "x" espacio en la coordenada X para que genere un suelo continuo en el borde inferior de la pantalla.

Lo tengo así:

using UnityEngine;
using System.Collections;

public class BaseGenerator : MonoBehaviour
{
   public GameObject terrain;

   public Transform mainCamera;

   float i = 0;

   // Use this for initialization
   void Start ()
   {

   }
   
   // FixedUpdate is called once per time unit
   void FixedUpdate ()
   {
      Generate ();
   }

   // Generate the base terrain
   void Generate()
   {
      if (mainCamera.position.x == i)
      {
         Instantiate (terrain, new Vector2 (mainCamera.position.x + 13.35f, mainCamera.position.y - 4.56f), Quaternion.identity);
         i += 4.95f;
         Debug.Log (i);
      }
   }
}

Básicamente, hay tres objetos que es necesario indicar: la cámara, el terrain (ambos aparecen al principio del script) y el GameObject vacío que sirve de instanciador.

Como el generador está anidado en la cámara (parentado en la jerarquía), se mueve con respecto a esta y toma como referencia de coordenadas también la misma, de modo que en el Transform del GameObject las variables de posición no cambian. Así, y dado que lo que hace el script es generar las baldosas a medida que el instanciador avanza, he de indicar en el if las coordenadas de la cámara puesto que las del GO están estáticas (sé que se podría aplicar un script a la cámara diciéndole que crease en ese punto los terrains directamente, pero ya habrá tiempo para los arreglos cuando esto esté resuelto).
Además, he añadido al final un Debug.Log para recibir las notificaciones pertinentes por consola (lo eliminaré cuando por fin funcione).

El problema es que perfecto, genera la primera baldosa, la consola reporta el incremento de i (lo que significa también que el script reconoce la condición del if como correcta)... y ya está. No crea más terrains. Es como si el Generate solo se quisiera activar una vez.

Las dos posibles soluciones que soy capaz de intuir (que no de aplicar completamente, como este post evidencia jajaja) son:
-o que hay algo mal indicado en, probablemente, la función Generate,
-o que no he incluido la función correctamente en Start, Update o donde sea (tampoco acabo de comprender del todo las aplicaciones prácticas de cada una, conozco la teoría y lo que hacen a nivel de concepto pero luego me cuesta aplicarlo sin ayuda en algunos casos). Supongo que será en FixedUpdate (así es como está escrito, de hecho), pero no estoy del todo seguro.

Agradecería muchísimo ayuda de cualquier tipo, porque llevo ya varios días dándole vueltas, probando, buscando información y preguntando por ahí y nada. Todo iba rodado (más o menos jeje) hasta aquí, y veo que lo que tengo que hacer a continuación también es más sencillo, así que este bache me tiene "jodío".

¡Saludos!
#10
Proyectos / KATRIX
09 de Diciembre de 2014, 09:35:24 PM
KATRIX

Estos gatos están hambrientos, y harán cualquier cosa por conseguir una galletita.
Personaliza a tu gato, ponle un nombre de espía molón y lánzate a KATRIX en una búsqueda contrarreloj del tan ansiado manjar. ¡Dicen que sabe a salmón!
Canjea los puntos obtenidos por mejoras y convierte a tu félido compañero en el mejor gato secreto de todos los tiempos.
Género: Arcade.
Recomendado para todas las edades.

Proyecto orientado a ser una aplicación gratuita para Android en Google Play.

En principio, este es solo un proyecto para ampliar el portafolio de trabajos realizados y, claro está, la experiencia personal en el desarrollo de videojuegos y aplicaciones. No obstante, de obtenerse al final alguna clase de beneficio económico, las ganancias se repartirían de forma equitativa.

Se busca programador de C++/# y Unity, grafista 2D (estilo manga/anime preferiblemente) y técnico de sonido o similar. Ya tenemos a un compositor que se encargará de la pieza de fondo.
Yo, lógicamente, sería el director del proyecto, coordinando a las otras cuatro partes (además, estoy aprendiendo C++ y tengo ciertos conocimientos musicales amateur con el piano y facilidad con la escritura, así que podría llegar a tomar parte activamente en el proceso de desarrollo, más allá del diseño y la dirección).

Contacto: itizhor@gmail.com.

Este es mi primer proyecto (alternativo a "MUSICATS"; se avisará en ambos hilos de qué proyecto se consolida antes como viable). Busco gente dispuesta a terminarlo, que se comprometa. Siempre existe la posibilidad de volver a trabajar juntos en el futuro.
#11
MUSICATS

Los MUSICATS son lindos gatitos de colores que saben bien cómo llevar el ritmo. Sincronízalos a todos tú solo o con tus amigos y toca tus canciones favoritas en tu Android o Tablet. Elige la altura de sus notas, su intensidad y ¡empieza a jugar con ellos!
Además, Do y los demás MUSICATS estarán encantados de enseñarte los acordes más sencillos para ayudarte en tu nueva aventura musical. ¿Quién dijo que el solfeo fuese aburrido?
Colores, música y muchos gatos se unen en MUSICATS para sorprender al usuario. ¡No te los pierdas!
Género: Musical/Didáctico.
Recomendado para todas las edades (aunque pueda parecer infantil, el potencial creativo es considerable).

Proyecto orientado a ser una aplicación gratuita para Android en Google Play.

En principio, este es solo un proyecto para ampliar el portafolio de trabajos realizados y, claro está, la experiencia personal en el desarrollo de videojuegos y aplicaciones. No obstante, de obtenerse al final alguna clase de beneficio económico, las ganancias se repartirían de forma equitativa.

Se busca programador de C++/# y Unity, grafista 2D (estilo manga/anime preferiblemente) y técnico de sonido o similar que se encargue de, principalmente, los maullidos de los gatos transportados a las 84 alturas en Hz de las siete escalas completas del piano.
Yo, lógicamente, sería el director del proyecto, coordinando a las otras tres partes (además, estoy aprendiendo C++ y tengo ciertos conocimientos musicales amateur con el piano y facilidad con la escritura, así que podría llegar a tomar parte activamente en el proceso de desarrollo, más allá del diseño y la dirección).

Contacto: itizhor@gmail.com.

Este es mi primer proyecto (alternativo a "KATRIX"; se avisará en ambos hilos de qué proyecto se consolida antes como viable). Busco gente dispuesta a terminarlo, que se comprometa. Siempre existe la posibilidad de volver a trabajar juntos en el futuro.



Para explicar mejor el funcionamiento del juego, expondré un breve ejemplo de muestra:
Supongamos que queremos tocar la famosa "Someone like you" de Adele. Pues bien, se me ocurre que podrían conectarse tres amigos: uno elegiría alturas medias/altas para tocar la voz, otro, notas medias/bajas para la mano derecha del piano y otro, bajas para la izquierda. El primero escogería la intensidad "forte" y los dos restantes, la intermedia (simplemente para resaltar la voz sobre el instrumento; aunque la intensidad también podría modularse con barritas de manera gradual para obtener una mayor libertad y precisión, por ejemplo). Una vez terminada, podrían aplicarse filtros o modificaciones en la velocidad de reproducción antes de guardar la grabación en la galería.
¡Genial!
#12
Proyectos / Musicats
04 de Diciembre de 2014, 04:06:38 AM
NOTA: El proyecto definitivo de este hilo se describe tres comentarios más abajo.


¡Hola!

Me llamo Alejandro, y soy nuevo en esto de los videojuegos. La única experiencia que sé podría serme útil es mi mano con la escritura y mi oído musical amateur de nivel aceptable (he ganado un par de concursos literarios... de dos a los que me he presentado y toco el piano de manera autodidacta, además de tener muy buen sentido del ritmo, oído para discernir instrumentos y melodías en una pieza con relativa facilidad e "imaginación musical"). De programación sé el nombre de algún código y poco más (estoy empezando a estudiar C++). Para más información, ya tengo los 18 y estudio el segundo curso del Bachillerato de Biología (lo cual no tiene mucho que ver con el asunto, pero algo es). Sería esta ciencia a lo que me gustaría enfocar el próximo período universitario (llamadlo vocación), pero preferiría optar por salidas laborales relacionadas con este mundillo.

Dejando de lado los típicos comentarios de siempre sobre increíbles videojuegos online de última generación con mucha ilusión y ganas (al principio) como única base, he pensado empezar bajito.

Haciendo por encontrar una idea original, vinieron a mi memoria todos esos juegos "de estudio" tan populares en los 90: carreras de cochecitos por suelos y mesas conectadas por reglas y sillas con libros abiertos, interacción en flash con personajes cómicos en una oficina, etcétera. Así pues, se me ha ocurrido una idea sencilla (o, al menos, a mi parecer lo es) a la par que portadora de ese gustillo absurdo que tanto cunde entre muchas de las apps más descargadas hoy día (después de aquella aplicación cuyo único fin es romper un cristal tocando la pantalla, todo es posible): conseguir encestar una bola de papel en una papelera.

El escenario sería sencillo. Tridimensional, sí, pero de texturas "de andar por casa" sin problemas (o incluso objetos lisos en los casos más disimulados). Sin más físicas que las de la propia bola (todo lo demás estaría "pegado"). Y un escenario más simple imposible: una habitación de planta cuadrada, idéntica en todos los niveles. Cambiaría, eso sí, el "decorado": mesas, flexos, pilas de libros, estuches... que dificultarían la tarea. Tenía en mente programas como Blender.

¿Música? Alguna de esas cancioncillas pegadizas del demonio vendrá de perlas. Y el sonido... El choque de la bola, el "clic" de los botones del menú y... ¿aplausos al encestar?

Y en cuanto a la jugabilidad... En principio sería para PC (aunque también barajo hacerlo app para Android), así que únicamente habría que elegir el punto exacto del plano vertical y paralelo a la pared frente a la que se sitúa la papelera moviendo el ratón y manteniendo el botón izquierdo (o arrastrando el dedo) y soltarlo rápidamente en la dirección deseada desde el punto elegido (o "lanzar" el dedo) para tirar. Se van superando niveles (pongamos un total de... 25), cada vez más complejos.

Lo único que no acabo de imaginar es la cámara; podría moverse también para facilitar el ángulo de tirada. Aunque aquí no me aventuro más, dado que ya he dicho que de la parte "de ordenador" sé más bien poco, y no sé cómo un mínimo cambio, aun mínimo, podría afectar al desarrollo del juego.

Por el momento estoy yo solo, aunque tengo amigos con ciertos conocimientos en grafismo, programación y música (conservatorio y programas de edición musical). Así pues, ¿qué me aconsejáis para poder llevar a cabo el proyecto?

¡Saludos!





Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.