Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 04/07/2021 in all areas

  1. 3 points
    Hola a todos, les presento mi más reciente proyecto Bubbles and Puzzles, espero que sea de su agrado y puedan apoyarme con su feedback, les estaré muy agradecido. Se trata de un juego tipo fruit cut, pero en vez de cortar las frutas, tienes que cortar las burbujas y rescatar las frutas de su interior para completar el nivel y así poder avanzar. El rescate tiene que ser en el orden indicado ya que de lo contrario iras perdiendo vida hasta el punto del Game Over. La meta es llegar lo más lejos posible y conseguir la mejor puntuación para posicionarte en el Tablero de Ranking, tienes la oportunidad de compartir tu dispositivo con hasta 5 jugadores para así hacerlo más competitivo. Sin más les dejo estas imágenes del juego. Disponible en la Play Store.
  2. 2 points
    Perdón por responder tan tarde! No, no es requerido, las referencias a componentes se buscan automaticamente. La estructura que yo propongo es una estructura óptima, es decir que puedes hacer varias cosas interesantes separando la parte visual de la parte física (collider + rigidbody). Lo que sí o sí es requerido es que todo lo relacionado al personaje esté contenido dentro de un "root" u objeto maestro (padre). No, de hecho CCP no hace referencia a los huesos de ninguna manera. En la "Demo" mi personaje es un humanoide, gracias a esto puedo usar el avatar que Unity ofrece para acceder a los IK (por ejemplo). Por ejemplo (estado LadderClimbing ) public override void UpdateIK( int layerIndex ) { if( !useIKOffsetValues ) return; UpdateIKElement( AvatarIKGoal.LeftFoot , leftFootOffset ); UpdateIKElement( AvatarIKGoal.RightFoot , rightFootOffset ); UpdateIKElement( AvatarIKGoal.LeftHand , leftHandOffset ); UpdateIKElement( AvatarIKGoal.RightHand , rightHandOffset ); } void UpdateIKElement( AvatarIKGoal avatarIKGoal , Vector3 offset ) { CharacterStateController.Animator.SetIKPositionWeight( avatarIKGoal , 0f ); Vector3 originalRightFootPosition = CharacterStateController.Animator.GetIKPosition( avatarIKGoal ); CharacterStateController.Animator.SetIKPositionWeight( avatarIKGoal , 1f ); CharacterStateController.Animator.SetIKPosition( avatarIKGoal , originalRightFootPosition + offset ); } Ahora mismo el método usado para movimiento es muy pero muy simple, un MoveTowards que modifica la velocidad linealmente con el tiempo. El base speed limit indica el target del MoveTowards (función de Vector3) del walk (no de run). Este valor será el valor final de velocidad obtenido, es decir que técnicamente no es posible, ya que mayor límite de velocidad + aceleración implica obtener una velocidad mayor. Ya que es un MoveTowards (incluso si fuese un Lerp), quizás lo que más te importe a la hora de modificarlo es su "t factor" (el tercer argumento de este método). Si tienes el control de "t" entonces puedes controlar la velocidad como quieras, independientemente de sus límites. En mi caso uso acceleration/deceleration como variables "t". Jugar entre los valores de velocidad y los umbrales (threshold) del animator es fundamental. Quizás tratar de cubrir varios tipos de movimiento (parada, arranque suave, trote, correr, etc) todos al mismo tiempo (usando una simple funcion lineal) no sea una buena solución en tu caso. Si realismo en las animaciones es lo que necesitas se pueden hacer dos cosas: Mejorar el script de movimiento. Meter curvas para lograr un movimiento menos lineal y más personalizable es algo que voy a introducir en 2.0.0. Ya esto pasa por el lado de la implementación de la lógica (por parte del usuario) y escapa al alcance del asset. De todas formas siempre trato de meter este tipo de cosas, de manera de facilitar un poco la parte del gameplay. Usar root motion, piensa en GTA 4/5 por ejemplo. No hay scripts ni nada de eso, el clip contiene la información de movimiento y solamente se lee el input del player. Con 1.3.3 puedes usar root motion para planar velocity y seguir usando la gravedad de NormalMovement.
  3. 2 points
    Gracias francoe1 Les comparto un pequeño video para ver de que va el juego
  4. 1 point
    Interesante aproximación, me pondré manos a la obra, gracias!
  5. 1 point
    Buen día señores, Aplique una solución a otro problema pero creo q podría ser útil aquí, (para que tengas de donde escoger) Cuando se presione la tecla puedes empezar a acumular time.deltatime en una variable, y cuando el tiempo que quieras se cumpla entonces entras con un "if" a la función que quieras que se ejecute. Saludos a todos.
  6. 1 point
    Este sábado pasado presentamos #RayuelaJam2021. Aprovechamos el tirón para hacer una retrospectiva de nuestra participación como estudio en las ediciones pasadas. https://oniria.world/2021/04/12/devlog-5-rayuelajam-retrospectiva/
  7. 1 point
    Otro vídeo del curso un poquitin mas avanzado de creación de NPC's con ML-Agents. Ahora vemos como con una cosa tan tonta como trabajar con un segundo componente RayPerceptionSensor3D (que son 5 o 10 minutos) se puede mejorar la navegación de nuestro agente. Lo que demuestra que mas vale perder tiempo en pensarse un poco las cosas, que en la fuerza bruta de horas de entreno 😮 como me ha pasado a mi. O incluso mejor que entrar en el mundo de cometer errores tocando los hyperparameters del fichero .yaml!
  8. 1 point
  9. 1 point
    Buenas. No sé si te valdrá...yo para los controles hago uso de los ejes virtuales de Unity. Dichos ejes se mueven entre valores -1 y 1 y poseen dos parámetros que puedes ajustar y que indican cuan lento o rápido pasas de 0-1 o de 1-0 (y con el negativo). Podrías controlar con un IF si el valor llega a 1. En ese caso (según el ajuste que tengas) ya llevarás un tiempo pulsada la tecla y podrías poner el código que quisieras en ese caso. Te paso un enlace del manual que he hecho para Unity por si te sirve de algo: https://wiki.cifprodolfoucha.es/index.php?title=Unity_Gestión_Dispositivos_de_Entrada#Entrada_est.C3.A1ndar La propiedad es Sensitivity y ya tienes un eje llamado Jump configurado para hacer uso de la barra espaciadora.
  10. 1 point
    puedes usar un float para contar el tiempo que mantubiste la tecla pulsada, y si estubo pulsada menos de 0.25f segundos, saltas, pero si estubo pulsada mas, pues haces la orra accion. tendrias que contar el tiempe entre el "down" y el "up" de la tecla
  11. 1 point
    Sin ver cómo tienes montado tu código es un poco jugar a la lotería, pero te sugiero que pruebes con Input.GetKey, este te devuelve True mientras la tecla esté pulsada, si estás usando Input.GetKeyDown prueba a cambiarlo por lo que te digo, y si puedes, enséñanos tu código y será más fácil.
  12. 1 point
    Buenos días compañeros!!, por fin he solucionado mis problemas con el Animator, aunque no del todo, pero quiero dejar aquí la solución para que no le pase a nadie mas. Unity tiene un orden de transiciones, pero ese orden al menos en la versión 4.7.2 que es la que uso yo, no funciona correctamente hasta que no aprendes a utilizar "Atomic", que es una casilla que por defecto viene marcada, pero que al desmarcarla significa "NO PASAR A ESTA ANIMACIÓN SI ANTES ESTÁ EJECUTANDOSE OTRA QUE ESTÉ PRIMERO EN EL ORDEN DE TRANSICIONES". Quiere decir, que si le damos a correr y a saltar al mismo tiempo, Unity podría intentar hacer la animación de correr y después la de saltar creando una pose extraña, mientras que si destildamos la casilla Atomic y colocamos en la lista de transiciones la pose de saltar en primer lugar, Unity antes de iniciar la animación de correr iniciará la de saltar porque tiene prioridad. Esto me ha solucionado el 90% de los errores de animación, pero aún hay otros como que por ejemplo esté realizando una transición y quieras interrumpirla, que creo que lo voy a tener que hacer con programación, porque esta versión de Unity no tiene el Has Exit Time. Saludos.
×
×
  • Create New...