Noticias

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

Video y texturas 2D [APORTE - JavaScript]

Iniciado por arjmaj, Agosto 13, 2017, 03:12:05 AM

Tema anterior - Siguiente tema
Agosto 13, 2017, 03:12:05 AM Ultima modificación: Agosto 14, 2017, 12:03:01 AM por arjmaj
Hola, que tal?, muy buenas. Hacia mucho que no venia por estos lares (años), pero ahora que me quede sin trabajo y que ando de novio, para hacer algo especial por nuestro aniversario, volvi a las andadas con unity.
 
Primero, esto me costo entenderlo ya que desde la version 3 de unity que no lo usaba (por dios, cambiaron tantas cosas...). Pero vamos al lio.
 
Aclaración: no soy experto, seguramente haya mas maneras de hacer esto mismo, y mas prolijo. Pero por ahora me doy por satisfecho.
 
Bien, vamos con el primero codigo (explicacion en el mismo):
 

#pragma strict
//Declaro las variables (En este codigo solo hay 3 funciones, PLAY, STOP y SIGUIENTE-este ultimo es automatico al darle stop-)
public var sereproduce : boolean; //Para reproducir
var objeto : GameObject; //para un raycast, en este objeto se encuentra un plano que reproduce el video
var daleplay : Video.VideoPlayer; //Plano, este lo asigno en esta variable mediante el inspector
var clips : Video.VideoClip[]; //Array de todos los clips de video que se van a reproducir en el plano
var clips2 : Video.VideoClip; //Segunda variable, Video no permite "slide", no se que es pero sin esta no funciona
var siguiente : int; //Subindice para nuesto array de clips
function Start () {
sereproduce = false;
clips = Resources.LoadAll.<Video.VideoClip>("Videos"); //Levanto toidos los videos que se encuentren en la carpeta "Assets/Resources/Videos"
for(var i=; i < clips.length; i++){
   print(clips[i].name); //Bastante simple, para saber que levantó y asignó a nuestro array todos los videos
}
siguiente = ;
}
function Update () {
if(siguiente >= clips.length){ //Nuestro subindice para el array
   siguiente = ;
}
if (Input.GetButtonDown("Usar")) {
   var hit : RaycastHit;
   var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
}
if (Physics.Raycast(ray,hit)) {
   if (hit.collider.name == objeto.name && sereproduce == false) { //Si golpea con un objeto con el mismo nombre que el objeto que asigne al gameobject Y si no se reproduce nada...
      clips2 = clips[siguiente]; //Aca asigno nuestro primer clip de video del array a nuestra segunda variable
      daleplay.clip = clips2; //Aca a nuesto VideoPlayer
      daleplay.Play(); //Comienza a reproducir
      print(daleplay.clip.name); //Por si las moscas, un poco de debug no viene mal
      sereproduce = true;
   }
   else if (hit.collider.name == objeto.name && sereproduce == true){
      daleplay.Stop();
      sereproduce = false;
      siguiente ++;
   }
}
}
//Se puede hacer con isPlaying, cambiando la variable "sereproduce", pero me daba algunos problemas, tal vez por mi codigo, no soy experto, pero bueno, asi quedo andando.

 
Bueno, no se asusten, el segundo es mas facil... Here we go again!
 

#pragma strict
//Creamos nuestras variables señores ///NOTA: esto esta muy bueno para adaptarlo a algun sistema de inventario de algun juego, aunque yo no llego a tanto
var texturas : Texture2D[]; //Un hermoso array de texturas 2D
var imagenes : GameObject; //Nuestro "plano-cubo-esfera" o lo que quieran, que vayan a asignarle texturas
var ingresarespera : boolean; //Nuesto limitador a la hora de hacer los cambios de textura automaticos
var subindice : int; //Como dice, subindice de nuestro array
function Start () {
texturas = Resources.LoadAll.<Texture2D>("Fotos"); //Mismo que el de arriba, tomamos el array, y le asignamos todo lo que se encuentre en la carpeta FOTOS, que sea del tipo TEXTURA 2D
for(var i=; i < texturas.length; i++){
   print(texturas[i].name);
}
ingresarespera = true;
subindice = ;
print(ingresarespera);
print(subindice);
}
function Update () {
if(ingresarespera == true){
   ingresarespera = false;
   print(subindice);
   Espera();
}
}
function Espera(){
if(subindice < texturas.length){
   imagenes.GetComponent.<Renderer>().material.mainTexture = texturas[subindice]; //obtenemos el componente para renderizar, con su material original, le asignamos la nueva textura
   subindice ++;
   yield WaitForSeconds (5);
   ingresarespera = true; //Lo ponemos a True, para el siguiente conteo =D
}
else{ //Si no es menor el subindice... osea, si el subindice es igual o mayor que el largo de nuestro array (siempre asi, sino el OutOfRange de los huevos)
   subindice = ; //Ponemos el subindice a cero para repetir todo de nuevo
   yield WaitForSeconds (5);
   ingresarespera = true; //Volvemos a repetir
}
}

 
Tal vez a alguien le sirva, la guia y el manual de unity no dan a entender nada y fueron HORAS de intentar. En fin. Que esta bien y todo, pero si esto nisiquiera esta explicado en el scripting
 
manual de unity, que te dice "es la funcion inherente a esta otra funcion" y vas en circulos todo el rato. Ya veo en 8bit de tanto darle vueltas... Suerte y hasta la proxima! =D
 
 
 
EDIT: por un comentario de otro usuario cambie los comentarios del script, en todo caso, si asi esta mas entendible y "limpio" haganmelo saber. 

Hola armaj,
 
yo he empezado a leer el código, pero me dificulta tanto comentario y se me hace demasiado pesado.
 
Creo que está bien comentar el código, pero hasta un límite, no hace falta comentar linea por línea, porque al final en vez de ayudar dificulta la tarea de seguirlo.
 
Por ejemplo:
 

yield WaitForSeconds (5); //Espero 5 segundines mas

 
Es innecesario comentar esto, ya que se ve muy claro su función.
 
Muchas veces es mejor un nombre claro y descriptivo en las funciones y variables que un largo comentario explicando lo que hace.
 
Solo quería hacer una pequeña crítica constructiva, de un error que veo a menudo y que muchos hemos cometido alguna vez.
 
Gracias por el aporte,
 
Un saludo.

Cita de: OldGuy date=1502615119Hola armaj,
   
   
      yo he empezado a leer el código, pero me dificulta tanto comentario y se me hace demasiado pesado.
   
   
      Creo que está bien comentar el código, pero hasta un límite, no hace falta comentar linea por línea, porque al final en vez de ayudar dificulta la tarea de seguirlo.
   
   
      Por ejemplo:
   
   

yield WaitForSeconds (5); //Espero 5 segundines mas

   
      Es innecesario comentar esto, ya que se ve muy claro su función.
   
   
      Muchas veces es mejor un nombre claro y descriptivo en las funciones y variables que un largo comentario explicando lo que hace.
   
   
      Solo quería hacer una pequeña crítica constructiva, de un error que veo a menudo y que muchos hemos cometido alguna vez.
   
   
      Gracias por el aporte,
   
   
      Un saludo.
   


Graciela, ahora corrijo y quito todo lo que no sirva del medio =D

Etiquetas: