El rincón de Unity

Postmortem

Me voy a poner ya manos a la obra con el Pac-man pero hay un concepto/duda que me tiene intrigado desde que empecé

El movimiento en Pacman es "muy cuadrado" y no da lugar a que Pacman se quede estancado donde no debe en medio de una línea o lo que sea, esta predefinido y hecho todos los movimientos que el va a seguir

tengo dudas sobre como hacer el movimiento, ya que intentando hacer bloques para que Pacman colisione no lo he conseguido lograr, pero pensandolo de alguna manera, todos los integrantes del nivel [fantasmas y pacman] van a poder ir solo por un determinado camino.

Se os ocurre alguna manera de programar un movimiento tan "predefinido"?

2 respuestas
elkaoD

#121 para que no se quede bloqueado es tan fácil como usar tiles. Pacman va por tiles, el movimiento no es libre.

Además el juego original tiene otra restricción: sólo puedes moverte hacia tiles vacíos. Si te mueves hacia un tile ocupado no ocurre nada (en lugar de chocarte contra la pared).

3 respuestas
JackSparow

#121 Quizá alguien tenga una propuesta mejor, no he hecho nada similar a un Pac-man, pero:

Puedes usar varios gameObject, poníendo cada uno a una intersección del mapeado. Y luego crear una estructura de datos de "grafo" con ellos, sobretodo para hacer la IA de los fantasmas.
El movimiento que te ha dicho #122 parece lo mas correcto, aunque tengo una duda, que pasa si hay un fantasma en esa casilla? te deja mover alli?

El sistema de colisiones creo que te irá bién para interectuar con comida, fastasmas... (creo que necesitas activar un atributo "Is Trigger" en el Box Collider del pac-man, nosé si te has olvidado).

function OnTriggerEnter(other : Collider){
//Comprovar comida.
if(other.gameObject.tag == "Comida"){
}
//Comprovar fantasma.
if(other.gameObject.tag == "Fantasma"){
}
}

2 respuestas
Srednuht

#117 Va perfecto.

Pero por si te interesa, la capsula se para si caes en el borde diagonal

r2d2rigo

#117 algo mal tienes en el timestep o en el contador de FPS porque me fluctuaba entre 30 y 50 y aun asi el movimiento del escenario es lo menos suave que he visto en años.

1 respuesta
Selbryn

#125 Tengo el timestep a 0.02 como viene por defecto y este es el codigo con el que se mueve el personaje:

spoiler

No se realmente a que te refieres con que el movimiento no es suave.

1 respuesta
JackSparow

#126 multiplicas dos veces por speed?
#128 No no, solo era por si querías ir exactamente a esas 6 unidades/s, para que no se descuadre con otras velocidades.
Conceptualmente no es normal que tengas una variable que determine que la velocidad es 6, y luego realmente sea 36 xD

1 respuesta
Selbryn

#127 Si ahora mismo si, puede ser eso la causa de que no tenga un movimiento suave?

2 respuestas
Postmortem

#122 #123 Muchas gracias! he cogido un pequeño "framework" instructivo para construir Tiles y he editado un poquitín el código, para orientarme yo y poder recrear 100% los Tiles del Pacman, cuando lo tenga texturizado y presentable colgaré algo en el WIP

1
storm2211

#128 estas actualizando la camara en el lateupdate? eso puede ser la causa del efecto jittery ese

1 respuesta
Selbryn

#130 Ahora mismo lo tengo tal que así:

Con la cámara dentro del player: https://dl.dropboxusercontent.com/u/53581538/Public.html

La cámara con un script: https://dl.dropboxusercontent.com/u/53581538/ConCript/ConCript.html

El Script de la cámara

void LateUpdate () {
		
	transform.position = new Vector3(trPlayer.position.x + offset, transform.position.y, transform.position.z);
	
}
Buffoncete

#123 polimorfismo al poder!

O sino una factory, no seamos perros xD

Postmortem

#122 Me estoy rallando mucho con el movimiento, tengo hecho por boxes independientes creado el mapa de pacman y el camino que debe recorrer, ahora queda programar las restricciones del movimiento.

Dado que pacman se mueve fluidamente, sigo pasando un cubo por los caminos, el problema viene cuando intento utilizar colisiones, he probado con el character controller y consigo que se mueva pero claro no es "tan cuadrado" como debería

si lo hago detectando Tiles que aún no me he puesto a probar y programarlo, para comprobar si el tile de arriba es de [tag:wall o tag:path lo tengo puesto] debería utilizar 2 raycast perfectamente alineados con pacman que detecte que el camino esta libre y que is it safe? es lo único que he visto guay. Y llega algunos momentos en el que "impacta" contra la pared, esto debería detectarlo con un OnCollisionEnter para que se pare por completo pac? claro que me da miedo que luego se "roze" con algun otro cubo y se llame el método y me pare a pacman

imagen related: http://answers.unity3d.com/questions/23295/raycasting-collision-for-player-movement-in-a-maze.html

2 respuestas
elkaoD

#133 te estás complicando porque estás aplicando técnicas 3D a un juego de los 80 xD No hay que hacer raycasting.

¿El mapa cómo lo has hecho? Debería ser un array bidimensional de tiles. Si sabes la posición del Pacman (imagino que en Unity puedes escalar a 1 unidad/tile) solo tienes que comprobar la posición adyacente del array.

2 1 respuesta
B

#133 Si yo fuera tú, lo haría de una de las siguientes formas:

  1. Crear un "Hitbox" con Box Collider que siempre tenga la posición del GameObject que use el CharacterController, luego deshabilitas la colisión entre estos y ya tienes un movimiento "cuadrado", digamos que los límites no serían una capsula, si no el Box Collider que sigue a la cápsula.

  2. Snappear el pacman usando un sistema de grid, como el movimiento de Pokémon, etc, de esta forma conseguirías que Pacman estuviese totalmente alineado al nivel, y las colisiones a mi parecer estarían cerca de la perfección.

La primera opción es una chapuza, creo que la segunda es la que te recomiendo, haciendo uso de Mathf.Round, modificando la posición constantemente cuando te mueves.

2 1 respuesta
Postmortem

#134 #135 Midgard, creo que ayer estuve toda la tarde trabajando para aplicar lo segundo que has dicho, pero no estoy 100% seguro de que sea eso, he situado muchos cubos, [triggers] en los que si entra pacman en colisión empieza a comprobar si la posición es exactamente la misma.

como en los float del movimiento este nunca va a ser exactamente igual lo he hecho no igualando si no dando un margen de error, el problema es que si pacman es muy rápido se puede saltar esa restricción y pasar vilmente del trigger, necesitaba algo como Math.Round, a ver si con eso puedo "cerrar" bien el movimiento

cuando detecto que pacman esta muy cerca de la posición 0 del cuadrado compruebo si hay un tile de wall arriba, a la izquierda, etc, y si hay alguno pongo manualmente a pacman exactamente en la posicion del pequeño trigger y le digo, chaval, de ahí no te mueves

dio buen resultado, pero solo es fluido con movimiento lento, ahora estoy intentando ajustarlo para que sea fluido y pueda ser algo más rapido, creo que esa función era justo lo que andaba buscando.

edit: No lo era xD no me deja nada de "holgura" necesito restar algo de precisión a los float pero no demasiado, voy a intentar cuadrar para que el sistema sepa en todo momento a que Tile quiere dirigirse por si no detecta el trigger, que se asegure de que no lo rebase

Postmortem

alguien que tenga experiencia con los sprites

podria decirme porque empieza a dibujar pixeles y sombras como le va en gana? no se si seran los shader o que es lo que es pero me esta sacando de quicio, y igual es una opción la mar de tonta y no la encuentro

probando y probando al fin he conseguido resaltarle esos ojos azules tan hermosos que tiene mi jodido fantasma

thx [necesitaba activar la opcion override for web, format true color y meterselo a todas las opciones que hay, android apple web o lo que aparece por aqui, en la propia textura]

13500

alguien que haya usado antes el Vector3.SmoothDamp() para movimiento de una camara isometrica? es que tengo algunos problemillas q no logro solucionar

Zekyon

Gente, he encontrado un asset gratuito para importar mapas hechos desde Tiled a Unity, se llama UniTMX y es bastante desconocido. Lo podéis encontrar aquí: https://bitbucket.org/PolCPP/unitmx

Lo recomiendo encarecidamente para cualquier tipo de proyecto 2D.

1
18 días después
B

Alguno tenéis ideas para hacer un sistema de combate cuerpo a cuerpo (melee)?

He estado probando con la clase Raycast pero, no me convence. ¿A alguno se os ocurre alguna otra forma?

2 respuestas
elkaoD

#140 has probado detección de colisiones?

1 1 respuesta
DaRk-eXe

#140 rigidbodies + collisions es lo que quieres.

1 1 respuesta
B

#141 #142 Sí, bueno, al final lo he hecho de forma chapucera:

He hecho un proyectil que se elimine en 0.04 segundos (para que no colisione con algo muy lejos, si no en la cara del jugador) y ya está.

El tema es que estuve leyendo que para hacer sistemas de combate el Raycast es de lo mejorcito, pero ayer estuve probando y bueno, está claro que no me aclaraba demasiado.

B

¿Alguien ha probado este "plugin"?

Se ve que forma sombras perfectas en tiempo real sin necesidad de Unity Pro, cuesta 20$, y estoy por comprarlo.

¿Opiniones?

-- Edit

No me había enterado, pero con Unity 4.2 la versión gratuita indie ya tiene sombras en tiempo real, solo con Directional Lights pero bueno, algo es algo ;)

9 días después
Scottie

Este verano comencé a trastear con unity, haciendo el chorra y probando cosas, todo mierda xD. Y nada, lo hacia todo con la ultima version de unity. El caso es que me acordé de que adquirí en su día una clave de unity pro 3.X.

Y no se si darle con ese, e intentar mejorar en ese entorno por si algun dia me da por hacer/terminar algo valorable... Se (creo, mas bien...) que que ha habido mas reparticiones de keys y cambios en la politica de ventas/uso de otras versiones de unity, y era mas por si me merece la pena mantenerme en esta version aprovechando la clave y tal, ya que ni idea de como va ahora la politica de ventas de productos hechos en android... :S

1
Potito

El ultimo juego de notch http://shambles.notch.net/

FLAGRANTE VIOLACION DE LAS IDEAS DE MIDGARD

Unsurvive ha sido plagiado !!!

3 1 respuesta
B

#146 Coño como mola xDDDD

13500

alguien me echa una mano? no entiendo, NO ENTIENDO, por qué esa sombra atraviesa ese cubo, cuando la luz direccional esta haciendo "culling mask" tambien a ese elemento, y el mesh renderer recibe y castea sombras. El material es default-diffuse.

FireHermes

hola gente, me gustaria empezar a aprender a hacer cosillas con unity, y he visto en amazon unos libros en plan para novatos y gente que empieza a desarrollar, en concreto son estos:

http://www.amazon.es/Unity-Game-Development-Essentials-Goldstone/dp/184719818X

http://www.amazon.com/gp/product/1430234229/ref=as_li_ss_tl?ie=UTF8&tag=wwwflexamailc-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1430234229

http://www.amazon.es/Unity-3-X-Game-Development-Essentials/dp/1849691444

tambien me han comentado pillarme alguno de los de esta lista, pero cual de todos? xD

http://www.gamefromscratch.com/page/Unity-Book-Roundup.aspx

que opinais, me podeis aconsejar? por cierto en amazon hay dos dias de envios gratis a todo lo que pidais...

sergilazaro

Confirmando los rumores: Unity tiene modo 2D integrado en la versión 4.3!
http://gamasutra.com/view/news/199109/Unity_introduces_new_2D_tools.php

La demo que enseñan (a partir de 1:10:00 o así) en la keynote de hoy tiene buena pinta: https://www.youtube.com/watch?v=gKYrdTZc5YE

1 respuesta
Tema cerrado