MálagaJam

Áreas => Programación => Mensaje iniciado por: Sirikon en 17 de Julio de 2015, 01:13:05 am

Título: [UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: Sirikon en 17 de Julio de 2015, 01:13:05 am
Buenas,

Durante el Playtesting del MalagaJam Weekend II le pregunté a @JaviCepa (http://foro.malagajam.com/index.php?action=profile;u=4) sobre cómo proseguir con Luxury Madness y qué mejoras le podría hacer. Una de las cosas que dijo fué:

"No uses las físicas de Unity, y si lo haces que yo no me entere  ;)"

Así que, cuales podrían ser algunos consejos/técnicas/procedimientos/loquesea para hacer el movimiento de los personajes de Luxury Madness (Personaje 2D, colisiones con plataformas, saltos, proyectiles, etc) sin usar las físicas de Unity?

Me imagino que será a base de echarle horas con detección de colisiones manual (lanzar en cada collider el método que traen para comprobar colisiones), animaciones, tweens y demás, pero pregunto sobre todo por si se me está pasando algo antes de ponerme a trastear.

Gracias de antemano :)

He creado un proyecto en Github con mis pruebas de físicas 2D custom para quien le pueda servir o quien quiera echarle un ojo para decir posibles mejoras: https://github.com/Sirikon/Unity2DCustomPhysics (https://github.com/Sirikon/Unity2DCustomPhysics), es un proyecto de Unity corriente y moliente, clonar, abrir en Unity y ejecutar. Por ahora no hay gran cosa (El personaje detecta la colisión con el suelo, cae, salta y se mueve por el eje horizontal.

Demo WebGL de Unity2DCustomPhysics: http://sirikon.github.io/unity2dcustomphysics/ (http://sirikon.github.io/unity2dcustomphysics/)
Demo WebGL de unas pruebas con físicas de Unity y el Animator, W&A para moverse, Espacio para saltar, Shift para correr, código aquí (https://github.com/Sirikon/UnityPlayground): http://sirikon.github.io/playground/ (http://sirikon.github.io/playground/)

Artículos interesantes sobre el tema
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JaviCepa en 17 de Julio de 2015, 01:22:36 am
Una pista para empezar: los colliders+raycasting son muy buenos para detectar colisiones. Son tus amigos.
Los rigidbodies son tus enemigos. Aplástalos.

Código: [Seleccionar]
Ray ray=new Ray(transform.position, Vector3.down);
RaycastHit hit=new RaycastHit();
float playerHeight=2;
if (Physics.Raycast(ray, out hit, playerHeight/2f)) {
/*Esta tocando el suelo, lo dejamos quieto en vertical*/
} else {
/*No esta tocando el suelo, le aplicamos algún tipo de "gravedad"*/
/*Ej: transform.position+=Vector3.Down*Time.deltatime;*/
}
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: Sirikon en 17 de Julio de 2015, 01:34:11 am
Gracias! tenía la duda a demás de si los Raycast serían lo suficientemente óptimos como para meterlos en el update/fixedUpdate, por lo que veo sí se puede sin problema.

Empiezo a trastear con ello, cuando tenga algún avance pondré por aquí un link a Github con mi proyecto de pruebas para quien le pueda servir  ;D
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JaviCepa en 17 de Julio de 2015, 01:37:52 am
Los Raycast son baratísimos para la CPU.
Puedes meter miles en cada frame y Unity ni se entera ;)
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: Sirikon en 17 de Julio de 2015, 01:58:00 am
Genial entonces :P
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: juanmotor en 17 de Julio de 2015, 12:34:16 pm
Si no conviene usar las físicas de Unity... ¿Qué sentido tiene usar Unity frente a otro motor? (Pregunto como ignorante del tema) ¿No se supone que son para ahorrarnos trabajo?
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JaviCepa en 17 de Julio de 2015, 01:57:28 pm
Las físicas de Unity son una parte muy pequeña de lo que hace el motor, hay infinidad de otras razones por las que Unity merece la pena (y algunas pegas también).

No es malo usar las físicas cuando lo que quieres hacer es un juego basado en físicas, pero en muchos casos queda mucho más profesional programar el movimiento de manera personalizada.

Algunos ejemplos en los que usar las físicas puede ser adecuado:

Algunos ejemplos en los que usar las físicas NO suele ser adecuado:

Las físicas por defecto son a Unity son como los filtros a Photoshop, está bien usarlos cuando hay que usarlos, pero nunca abusarlos.
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JuDelCo en 17 de Julio de 2015, 04:29:32 pm
Los Raycast son baratísimos para la CPU.
Puedes meter centenares de miles en cada frame y Unity no se entera ;)

Pero eso será en 2D no? Los raycast en 3 dimensiones imagino que si que consumen más (aunque imagino que eso está superoptimizado en sus entrañas con octrees y más cosas)
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JaviCepa en 17 de Julio de 2015, 04:55:55 pm
Son súper baratos tanto en 2D como en 3D. Aquí tienes un pequeño benchmark:
Código: [Seleccionar]
public class PetarUnity : MonoBehaviour {

public int cantidadDeRaycastsPorFrame=100;

void Update () {
for (int i = 0; i < cantidadDeRaycastsPorFrame; i++) {
Ray ray=new Ray(Random.insideUnitSphere*10, Random.insideUnitSphere*10);
RaycastHit hit=new RaycastHit();
Physics.Raycast(ray, out hit);
Debug.DrawRay(ray.origin, ray.direction*10, Color.yellow*0.9f);
}
}
}
Yo lo he llevado en mi PC hasta 15000 raycasts por frame (900000 raycasts por segundo) sin que baje de 60fps. Y eso que estoy dibujando los raycasts, si le digo que no los dibuje llega hasta 20000 (1200000 por segundo) sin bajar de 60fps.

Creo que son bastantes :D
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: MiguelCriado en 17 de Julio de 2015, 05:26:22 pm

Yo lo he llevado en mi PC hasta 15000 raycasts por frame (900000 raycasts por segundo) sin que baje de 60fps. Y eso que estoy dibujando los raycasts, si le digo que no los dibuje llega hasta 20000 (1200000 por segundo) sin bajar de 60fps.

Creo que son bastantes :D

Ya que estamos, ¿cómo soléis hacer la medición de fps? Os fiáis de los Stats del player, con el profiler, tirando de un script propio...
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: Sirikon en 17 de Julio de 2015, 05:49:27 pm
En cuanto a medir FPS, no se dónde lo vi (creo que en una lista de buenas prácticas para Unity), pero decía que lo que mostraba el profiler de Unity desde luego no eran los FPS, que era mejor hacerse uno propio.

PD: Acabo añadir el proyecto de Github de lo que estoy haciendo en el primer post
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JuDelCo en 17 de Julio de 2015, 05:52:43 pm
Yo grabo el monitor con una cámara de vídeo a 1200 fps y luego estudio los frames que hay distintos para sacar los FPS reales

lolno, tiro me fio de los stats y ya xD A las malas Fraps puede servir tambien
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: MiguelCriado en 17 de Julio de 2015, 05:57:47 pm
En cuanto a medir FPS, no se dónde lo vi (creo que en una lista de buenas prácticas para Unity), pero decía que lo que mostraba el profiler de Unity desde luego no eran los FPS, que era mejor hacerse uno propio.

PD: Acabo añadir el proyecto de Github de lo que estoy haciendo en el primer post

Yo grabo el monitor con una cámara de vídeo a 1200 fps y luego estudio los frames que hay distintos para sacar los FPS reales

lolno, tiro me fio de los stats y ya xD A las malas Fraps puede servir tambien

Lo decía por eso mismo. Todo el mundo dice eso, que el profiler y los stats se inventan los fps, pero nunca me he parado a hacer el benchmark personalmente.

Supongo que lo mejor siempre es programarse su propio script.
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: LucasGZP en 17 de Julio de 2015, 06:06:57 pm


public class PetarUnity : MonoBehaviour {


(http://media.giphy.com/media/NnGGHE0muVqpO/giphy.gif)
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: juanmotor en 17 de Julio de 2015, 06:26:19 pm
Ok gracias , ya lo voy pillando.

Por lo que entiendo el típico plataformas 2d si conviene ser usado con físicas (tema saltos y demás)

por otro lado creo que para usar los trigger y collider hay que añadir un rigidbody... por ejemplo para el tema balas y alguna nave le he añadido rigidbody pero con gravedad 0 ¿que opinais de ésto? ¿o mejor intentarlo con raycast?

Lo que me lleva a otra pregunta... ¿como veis el tema de navmesh para encontrar caminos? ¿Funciona en 2D? Yo lo probé en un terreno 3d y funciona sorprendentemente con poco codigo y de forma sencilla
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JaviCepa en 17 de Julio de 2015, 06:53:20 pm
Por lo que entiendo el típico plataformas 2d si conviene ser usado con físicas (tema saltos y demás)
No necesariamente. Las físicas en plataformas tiene un par de inconvenientes. El primero, que se las conoce todo el mundo y "cantan" a físicas desde lo lejos, lo cual no es malo, pero te diferencias menos. Hay algunos juegos que se salen con la suya a base de tenerlas muy bien implementadas y ajustadas, como es el caso de Limbo. El segundo inconveniente y más grave, es que pierdes en jugabilidad porque no está hecho a medida de tu juego. Ej: ¿Para qué añadir físicas a un juego en el que el personaje se mueve sólo de izda a derecha?

Además las colisiones son menos limpias que si se programa a mano y la Game Feel que este tipo de motores transmiten es que las cosas son muy "floaty", que pesan poco y que todo está en las nubes.

Te pongo un link a un juego de plataformas que hice en una ludumdare con movimiento custom en vez de físicas (la física la utilizo para los trocitos de zombie por ejemplo):
http://javicepa.com/the-last-rock/ (http://javicepa.com/the-last-rock/)

Citar
Lo que me lleva a otra pregunta... ¿como veis el tema de navmesh para encontrar caminos? ¿Funciona en 2D? Yo lo probé en un terreno 3d y funciona sorprendentemente con poco codigo y de forma sencilla
El navmesh nunca lo he usado, aunque tengo algo de noción sobre cómo funciona. Debería de tirar bien en 2D, aunque en este caso también recomendaría usar un pathfinding hecho a mano (no es muy dificil). Sí creo que es muy adecuado para juegos tipo FPS o RTS.
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: juanmotor en 18 de Julio de 2015, 01:38:18 pm
Ya me he bajado el juego , por cierto me ha gustado bastante ;) me ha hecho mucha gracia lo de la excavadora.

También me he bajado el código para echarle un vistazo , si no te importa... A ver que aprendo ;)
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JaviCepa en 18 de Julio de 2015, 06:01:03 pm
Claro! Para eso está ;)
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JuDelCo en 18 de Julio de 2015, 06:07:08 pm
Yo le he echado un ojo por curiosidad y me he encontrado con que el personaje sigue siendo un collider (círculo) y tiene su propio rigidbody, sin embargo el movimiento se realiza via programación. Entiendo que hiciste esto para dejar al motor de físicas que gestione las colisiones con el tilemap mientras tu te encargabas de darle las velocidades (que por cierto, no sé por qué no pusiste el rigidbody como kinematic entonces)

Otra duda que me asalta es la propia creación del mapa de tiles, ya que al parecer lo has hecho a mano sin ningún "importer" (o eso me ha parecido ver en el timelapse). Esto para un juego "mediano" me parece a mi que es morir un poco, ir cambiando cada tile de sitio o de tipo para ir construyendo el mapa.

Curioso también que hayas usado la cámara en perspectiva y no en ortográfica. Creo que para el caso es lo mismo xD (aunque te ahorras programar el parallax)
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JaviCepa en 18 de Julio de 2015, 10:00:22 pm
Respuesta a todo lo anterior:
en una jam todo vale ;)
(Especialmente en la compo de la ludumdare, que se come uno todo)

Lo de la cámara es para el parallax, efectivamente. Lo del rigidbody si no recuerdo mal lo hice porque si no no se crean los mensajes OnCollisionEnter() y similares.
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: Sirikon en 20 de Julio de 2015, 02:58:06 am
@JaviCepa (http://foro.malagajam.com/index.php?action=profile;u=4) He hecho los saltos y añadido easing a saltos y caídas del personaje, he actualizado el código en el repositorio al que enlazo en el primer post y he puesto una demo en WebGL por si quieres echarle un vistazo.

Para los saltos lo que he hecho es, utilizando la función que ya tenía para aplicar gravedad, invertir la misma.

El easing lo controlo según el tiempo (con Time.time) no se si esto es o no correcto, creo que sí, ya que el cuánto se desplaza el personaje cada segundo está regulado con Time.smoothDeltaTime, así que teóricamente se podría controlar según el tiempo pasado. Sin embargo, con los saltos me pasa que a veces salta un poco más y a veces un poco menos, moviendo toda la lógica a FixedUpdate esto parece solucionarse, pero falla la detección del personaje tocando el suelo (no que no funcione, si no que lo hace tarde), imagino que tendré que hacer la detección de colisiones e input del jugador en Update() y aplicar las físicas con easing en FixedUpdate(), ¿Correcto?.
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JaviCepa en 20 de Julio de 2015, 10:14:35 am
Acabo de probar la demo y está muy bien, es un movimiento muchísimo más limpio que con las físicas default.

Entiendo que ya que hablas de easieng, lo que estás haciendo es aplicar una especie de tween al salto. Puede ser un movimiento mucho más expresivo así, pero seguramente sea la fuente de ese problema de diferencias de altura.

Que los saltos sean irregulares es un problema común (y el siguiente paso lógico). Puede suceder por varias razones: diferencias en el Time.deltaTime, especialmente en los frames en los que pasa el GC o hay más carga de procesado; diferentes potencias iniciales de salto (si estás multiplicando la velocidad inicial por Time.deltaTime tendrás mucha variación indeseada. Al ser una aplicación puntual no deberías)

Estaría guay que fueras guardando las builds para ir viendo como vas depurando tu demo (y hacer un ejemplo de caso inicial con las físicas de Unity) para enseñarles la diferencia a los que vengan detrás :)
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JuDelCo en 20 de Julio de 2015, 07:27:53 pm
Yo estoy haciendo un playerController tambien en el que he programado yo mis propias físicas (no tiene rigidbodies ni nada vaya).

En mi caso estoy usando 9 linecasts para detectar las colisiones y de momento va sorprendentemente bien, lo bueno de no usar físicas es que puedo ajustar gravedad, velocidades, etc sin que empiecen a ocurrir cosas raras (es horrible ajustar algo en el motor de físicas sin cargarte otra cosa)

(http://i.imgur.com/eyq1Xnj.png)

PD: Técnicamente faltarían 3 linecast más arriba para las colisiones de "cabeza" pero aun no tengo el mapa hecho y estoy haciendo un poco todo a la vez asi que ya... ya....
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: juanmotor en 20 de Julio de 2015, 07:58:00 pm
Me ha gustado mucho como creas la clase character y luego haces otro código que herede de esa , dependiendo de si es jugador o zombie.

No estoy acostumbrado a Unity todavía y se me olvida que se pueden hacer cosas de esas  ;D

También muy bueno el truco de hacer creer al zombie que has pulsado izqda o dcha para que se mueva.

Hay una cosa que no entiendo que es por que no has usado el Animator Controller para las animaciones, supongo que será por costumbre o herencia de otras versiones.

Estoy mirando a ver si descubro donde usas los raycast ;)
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JuDelCo en 20 de Julio de 2015, 08:29:21 pm
Navegando por internet leyendo sobre el tema, me he encontrado estos dos recursos que son bastante interesantes relacionados con el tema:

http://www.gamasutra.com/blogs/YoannPignole/20131010/202080/The_hobbyist_coder_1_2D_platformer_controller.php

http://info.sonicretro.org/SPG:Solid_Tiles


El último es más bien para hacer un clon del Sonic, pero sin duda tiene cosas interesantes relacionadas con el movimiento de plataformas 2D
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JaviCepa en 20 de Julio de 2015, 11:19:09 pm
Geniales artículos! Van justo al foco del tema :)

Me ha gustado mucho como creas la clase character y luego haces otro código que herede de esa , dependiendo de si es jugador o zombie.

No estoy acostumbrado a Unity todavía y se me olvida que se pueden hacer cosas de esas  ;D

También muy bueno el truco de hacer creer al zombie que has pulsado izqda o dcha para que se mueva.

Hay una cosa que no entiendo que es por que no has usado el Animator Controller para las animaciones, supongo que será por costumbre o herencia de otras versiones.

Estoy mirando a ver si descubro donde usas los raycast ;)

Me alegro mucho de que mi código os esté ayudando ^^ Mucho mejor así que que se quede en un oscuro rincón. Sobre las herencias: es algo que me gustaba hacer por aquel entonces, pero ahora me gusta más hacer composición y mantener una estructura de clases plana (esto por cierto se merece un artículo... es un tema importante)

Lo de utilizar la misma interfaz para el zombie que para el humano me gusta mucho de cara a hacer IA, no siempre es lo más adecuado pero en este caso funcionó muy bien (has visto cómo saltan los zombies cuando los pasas por encima? ;))

El animator controller no lo usé porque por entonces acababan de salir las herramientas de 2D y no sabía que se podía aplicar a sprites.

Los raycast no me acuerdo de donde los usaba en este juego... En cualquier caso lo que está haciendo @JuDelCo (http://foro.malagajam.com/index.php?action=profile;u=62) es justamente a lo que me refiero.
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: Sirikon en 20 de Julio de 2015, 11:50:28 pm
He añadido los enlaces de @JuDelCo (http://foro.malagajam.com/index.php?action=profile;u=62) al primer post para que estén a mano :)

De lo que estoy haciendo no tengo versión igual con físicas de Unity, si tengo otra versión con físicas de Unity de otras pruebas combinándolo con el Animator, lo pondré en un rato en el primer post también.
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: Sirikon en 21 de Julio de 2015, 12:20:11 am
Hecho, puesto código de las pruebas con físicas de Unity y la demo WebGL
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: Sirikon en 21 de Julio de 2015, 04:15:30 pm
Navegando por internet leyendo sobre el tema, me he encontrado estos dos recursos que son bastante interesantes relacionados con el tema:

http://www.gamasutra.com/blogs/YoannPignole/20131010/202080/The_hobbyist_coder_1_2D_platformer_controller.php

En ese artículo hay un aspecto que creo (creo) he encontrado una solución mejor, al menos a mí me ha ido mejor.

Plantea el problema de detectar colisiones con el suelo de forma efectiva: Si por ejemplo tenemos un FPS bajo, el jugador podría pasar de la posición y=20 a la y=10 por ejemplo de un frame a otro, habiendo un collider en la posición y=15 e ignorándolo, para eso el artículo habla de colocar un "Buffer", que es poner algo más arriba un raycast que tenga como objetivo comprobar la distancia a la que se encuentra el suelo no desde los pies del personaje sino desde la cintura por ejemplo.

A mí esta solución me funcionó hasta que tuve el problema de controlar que el personaje no pueda entrar "atravesado" en una plataforma desde el lateral, hacer los controles necesarios para evitar esto era algo farragoso, ya que cayendo recto no hay problema, pero el personaje podría "pisar" el suelo con la cintura, rodillas o pies si se desplazaba lateralmente mientras caía.

Mi solución final fue en cada frame comprobar cuánto ha avanzado en el eje Y el personaje desde el anterior frame, y comprobar si ésta diferencia de altura hace que la distancia del raycast con el suelo pase de negativa a positiva (y por tanto, se ha pisado el suelo).

De esta forma evito los problemas de la primera implementación permitiéndome poner el raycast en los pies del personaje.

He actualizado el repositorio y la demo WebGL ;)
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JuDelCo en 21 de Julio de 2015, 04:32:18 pm
Te pongo algo que he encontrado que no es muy consistente. Creo que el gif es autoexplicativo

(http://i.imgur.com/lOvgDLb.gif)
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: Sirikon en 21 de Julio de 2015, 04:44:32 pm
@JuDelCo (http://foro.malagajam.com/index.php?action=profile;u=62) La inclinación de la plataforma a la que estás pegando cabezazos hace que la cara inferior tenga una inclinación menor a 45 grados y la cara derecha mayor a 45 grados.

Parece que el motor de físicas de Unity a la hora de dirigir ese "rebote" ignora la cara inferior por esa inclinación, si inclino la plataforma 315 grados para poner a 45 grados ambas caras el personaje puede ya rebotar en ambas.

Voy a investigar a ver cómo se puede arreglar esto, molas!

EDIT: Gif de ejemplo
(http://i.imgur.com/MGn77yZ.gif?1)
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: juanmotor en 21 de Julio de 2015, 10:06:44 pm
Se que es una chapuza pero para arreglar ésto no es posible hacer un sprite girado y que de ésta forma el collider siga estando sin girar (o al reves girando el collider para que quede plano)
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: Sirikon en 22 de Julio de 2015, 12:54:28 am
Afirmas o preguntas?
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: juanmotor en 22 de Julio de 2015, 09:47:30 am
Afirmas o preguntas?

Digamos que es una sugerencia por si sirve, sabiendo que es una chapuza y que no se si funcionara  ;D (vamos, una idea feliz) 8)
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: Sirikon en 22 de Julio de 2015, 12:44:07 pm
Vale xD, sería una solución rápida para Jams :)
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: dabamaqui en 28 de Julio de 2015, 10:43:05 am
Y ¿sirve de algo añadir un rigidbody sin que use gravedad, simplemente para que detecte las colisiones? porque una cosa que tiene Unity es que los colliders no detectan que han colisionado si uno de ellos no tiene rigidbody, o eso tengo entendido. Ya me pasó en la primera Málaga Jam que las balas (collider trigger) no chocaban con los objetos aun teniendo colliders, y hasta que no puse un maldito rigidbody no detectaba la colisión (OnTriggerEnter).

En el caso mencionado, sería mejor entonces ir tirando un raycast al frente de la bala hasta que detecte algo ¿no?.
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JaviCepa en 28 de Julio de 2015, 11:01:37 am
Sí sirve para algunas cosas. Puedes usarlo para aplicarle fuerzas desde el código y tener un movimiento "suave" por ejemplo, o para asignarle una velocidad.
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: dabamaqui en 28 de Julio de 2015, 11:14:27 am
Si, de hecho para el tema de aplicar fuerzas lo he utilizado bastante, pero me refiero a: ¿el hecho de hacer que un rigidbody no use gravedad aligera carga de CPU o es irrelevante? Hablo de ese tick de 'Use Gravity' dentro del rigidbody :P

Osease, si uso el rigidbody sólo para lo que has dicho (tocar el velocity, aplicar fuerza, detectar colisiones), ¿es bueno usar rigidbody?

Gracias!
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: JaviCepa en 28 de Julio de 2015, 11:34:07 am
La carga es muy pequeña (está súper-optimizado). El usarlo o no debería depender más del tipo de movimiento que buscas a nivel de estética/animación. Habría varias opciones igual de válidas dependiendo del contexto: el sistema de animación de Unity, la física, tweens, scripting "a huevo". El rendimiento no es tan importante salvo que quieras crear miles de instancias, pero todos los métodos requieren su optimización en ese caso.
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: Elena en 26 de Agosto de 2015, 11:43:12 pm
Acabo de leer este hilo del foro y es, buf, muy interesante. Teniendo en cuenta que la página oficial de Unity y los cursos te conducen por un camino diferente a lo que estáis diciendo, es decir, a usar las físicas de Unity.

¿Os animáis a, entre todos, montar un manual con todo este tema? Podríamos ayudar a mucha gente y, oh, MálagaJam con sus propios manuales by Jammers  8)
Título: Re:[UNITY] 2D: Movimiento de personaje, colisiones, etc... sin físicas de Unity
Publicado por: santiandrade en 27 de Agosto de 2015, 04:36:24 pm
Los Raycast son baratísimos para la CPU.
Puedes meter miles en cada frame y Unity ni se entera ;)

Pues me alegra saberlo! porque yo pensaba que el uso de raycast había que limitarlo en la medida de lo posible por temas de rendimiento. Yo los estoy usando mucho en mi proyecto (2D) para detección de multitud de colisiones y la verdad es que estoy encantado con su resultado. Ahora, sabiendo que no tengo por qué escatimar tanto en su uso, soy más feliz ;D

Gracias por la info! Buen hilo este  ;)