Madre mía... No te imaginas la de vueltas que he dado... ¡Mil gracias, leeré con más cuidado la próxima vez!
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Páginas1
#2
Scripting / Cambiar sprite indicando la ruta del recurso
Febrero 07, 2019, 05:08:36 PM
Hola a todos,
llevo unos días con un problema que me está volviendo loca. Quiero hacer algo que, a priori, creía que iba a ser sencillo, pero se ve que no...
Tengo una clase Cartas con tres atributos: nombre, tipo y sprite. Por otra parte, tengo un GameObject en la escena que consta de una imagen y un botón, al que le he añadido como componente un script para que, al pulsar el botón, se vea el sprite de la siguiente carta.
Las cartas no son GameObjects, no es una clase Mono Behaviour, porque se crean dinámicamente en otro momento del juego.
El script es este:
Por otra parte, en la clase Cards, el sprite está definido así:
He probado a pasar la ruta del Sprite de varias maneras, pero nunca consigo que se muestre... (no se ejecuta correctamente ni en Start() ni en Next()). He de decir que el nombre y el tipo sí que los obtengo correctamente, ya lo he probado en Debug.
Espero haberme explicado correctamente... ¿Alguien puede ayudarme?
¡Gracias!
llevo unos días con un problema que me está volviendo loca. Quiero hacer algo que, a priori, creía que iba a ser sencillo, pero se ve que no...
Tengo una clase Cartas con tres atributos: nombre, tipo y sprite. Por otra parte, tengo un GameObject en la escena que consta de una imagen y un botón, al que le he añadido como componente un script para que, al pulsar el botón, se vea el sprite de la siguiente carta.
Las cartas no son GameObjects, no es una clase Mono Behaviour, porque se crean dinámicamente en otro momento del juego.
El script es este:
public class ChangeCards : MonoBehaviour
{
public Image image;
private Cards[] cards;
private int index = 0;
void Start() {
Cards.SetCards();
cards = Cards.GetCards();
image.sprite = cards[index].sprite;
}
public void Next() {
index++;
if (index == cards.Length) {
index = 0;
}
image.sprite = cards[index].sprite;
}
}
Por otra parte, en la clase Cards, el sprite está definido así:
card = new Cards("Biblioteca", Type.Room, Resources.Load<Sprite>("Assets/Images/Cards/Biblioteca.png"));
public Cards (string name, Type type, Sprite sprite) {
this.cardName = name;
this.type = type;
this.sprite = sprite;
}
He probado a pasar la ruta del Sprite de varias maneras, pero nunca consigo que se muestre... (no se ejecuta correctamente ni en Start() ni en Next()). He de decir que el nombre y el tipo sí que los obtengo correctamente, ya lo he probado en Debug.
Espero haberme explicado correctamente... ¿Alguien puede ayudarme?
¡Gracias!
#3
Scripting / Repintar un GameObject 2D
Enero 28, 2019, 01:37:41 PM
He encontrado la respuesta, así que me respondo a mí misma por si a alguien le sirve.
Tal como imaginaba, hasta que no finaliza la ejecución de cada función (rutina), no finaliza el frame. Por tanto lo que hay que hacer es meter la lógica en una corutina. Entiendo que este aprendizaje va a ser muy importante en cualquier desarrollo, pues será algo que se utilice bastante a menudo. Por tanto, el código anterior quedaría así:
Por tanto, la función llamada desde el onClic va a invocar a la corutina, que cada vez que cambia un sprite se para durante un segundo (finalizando también un frame) y después continúa.
Tal como imaginaba, hasta que no finaliza la ejecución de cada función (rutina), no finaliza el frame. Por tanto lo que hay que hacer es meter la lógica en una corutina. Entiendo que este aprendizaje va a ser muy importante en cualquier desarrollo, pues será algo que se utilice bastante a menudo. Por tanto, el código anterior quedaría así:
public void throwDices() {
StartCoroutine(startThrowDices());
}
IEnumerator startThrowDices() {
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
while (stopWatch.ElapsedMilliseconds <= 1500) {
for (int i = 0; i < dices.Length; i++) {
changeDiceSprite(dices[i], random.Next(0, 6));
}
yield return new WaitForSeconds((float) 0.1);
}
stopWatch.Stop();
}
Por tanto, la función llamada desde el onClic va a invocar a la corutina, que cada vez que cambia un sprite se para durante un segundo (finalizando también un frame) y después continúa.
#4
Scripting / Repintar un GameObject 2D
Enero 25, 2019, 11:09:54 AM
Hola,
estoy programando unos dados en 2D. Al no querer meter animaciones, lo que he pensado es cambiar varias veces la imagen del dado (es decir, cambiando los números) antes de pararse en el definitivo. Mi código es este:
Por si alguien no conoce la clase Stopwatch, simplemente lo que está haciendo el código es comprobar si han pasado ya 10 segundos y, si todavía no han pasado, cambiar el sprite del dado y esperar un segundo más.
La parte lógica funciona bien, pero los dados no se repintan cada vez que se cambia el sprite, sino sólo la última vez. Deduzco que es porque hasta que no finaliza la ejecución del método onClic no se repinta nada... ¿Hay alguna manera de forzarlo?
¡Gracias!
estoy programando unos dados en 2D. Al no querer meter animaciones, lo que he pensado es cambiar varias veces la imagen del dado (es decir, cambiando los números) antes de pararse en el definitivo. Mi código es este:
public void throwDices() {
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
while (stopWatch.ElapsedMilliseconds <= 10000) {
for (int i = 0; i < dices.Length; i++) {
changeDiceSprite(dices[i], random.Next(0, 6));
}
Thread.Sleep(1000);
}
stopWatch.Stop();
}
Por si alguien no conoce la clase Stopwatch, simplemente lo que está haciendo el código es comprobar si han pasado ya 10 segundos y, si todavía no han pasado, cambiar el sprite del dado y esperar un segundo más.
La parte lógica funciona bien, pero los dados no se repintan cada vez que se cambia el sprite, sino sólo la última vez. Deduzco que es porque hasta que no finaliza la ejecución del método onClic no se repinta nada... ¿Hay alguna manera de forzarlo?
¡Gracias!
#5
Presentaciones / Me presento!
Enero 25, 2019, 10:46:50 AM
Buenas a todos!
Soy Noelia, una (casi) ingeniera del software. Lo que me falta es mi proyecto de fin de grado, y en ello estoy... Estoy haciendo un juego de mesa en 2D, por lo que la mayoría de mis preguntas estarán relacionadas con esto...
Un saludo!
Soy Noelia, una (casi) ingeniera del software. Lo que me falta es mi proyecto de fin de grado, y en ello estoy... Estoy haciendo un juego de mesa en 2D, por lo que la mayoría de mis preguntas estarán relacionadas con esto...
Un saludo!
Páginas1