Jump to content

lightbug

Registrados
  • Content Count

    2,375
  • Joined

  • Last visited

  • Days Won

    202

Everything posted by lightbug

  1. 🤣🤣🤣 No pude contenerme.
  2. Quizás el temita de las oscilaciones se deba al "Apply root motion" del componente Animator (?). Fijate si desactivando el bool ese se va eso. La otra que se me ocurre es algún problema con el Avatar en sí, andá a las opciones de importación del modelo animado (cliqueando sobre el modelo), luego rig. Te debería decir "Humanoid", que está bien, luego dale al botón "Configure...". Fijate si están todos los huesos en verde, si no, reiniciá la pose en T pose. Si bajás te debería decir en "Pose" algo como "Enforce T-Pose" o similar. Dale a eso, y aplicá. Ya que estás acá, no estaría mal revisar la definición de los huesos, asegurate que el hombro esté como hombro, la pierna derecha como pierna derecha, y así. Con "jerarquía" me refería al panel "Hierarchy" del editor de Unity, especificamente al objeto de tu personaje (con todos sus hijos, nietos, etc). Igual, no es que sea determinante a la hora de encontrar el problema (probablemente no aporte nada relevante), pero es que muchas veces en vez de "hablar" acerca del problema es mejor mostrar la escena desde donde se pueda, de esa forma te van a poder ayudar mejor. Sí, excelente 👌
  3. Podrías subir más info? Dónde está el pivot (blender y Unity)?, ¿Cómo posicionas el personaje? ¿Cómo es la jerarquía? ¿Es un humanoide o un generic? etc etc etc.
  4. Eso está mal, nunca vas a cambiar de Vector3.down de gravedad. El raycast (aunque prefiero un sphere cast) tiene que darte solamente la normal. Una vez que tengas esto es cuestión de hacer gravityDirection = - normal (tenés bastantes problemas con esto, pero para arrancar ta bien). gravity = gravityMagnitude * gravityDirection; Luego para rotar el personaje: Quaternion targetDeltaRotation = Quaternion.FromToRotation( transform.up , - gravityDirection ); (definí "deltaRotation" como privado de la clase, slerpSpeed y suavizar también ) deltaRotation = suavizar ? Quaternion.Slerp( deltaRotation , targetDeltaRotation , slerpSpeed * Time.deltaTime ) : targetDeltaRotation; transform.rotation = deltaRotation * transform.rotation; Fijate que la multiplciación de Quaternions no es conmutativa, es decir que Qa * Qb != Qb * Qa . Me pasa todo el rato que algo debería funcionar y simplemente no lo hace porque las puse alrevés. Como dice @Igor no uses Physics.gravity, vas a cambiar la gravedad de todo cuerpo rígido en la escena. Aplicá tu propia gravedad: rigidbody.velocity += gravity * Time.deltaTime;
  5. Hacé un tatetí y presentalo, luego un tetris y presentalo, luego X y presentalo, te vas a dar cuenta que esas preguntas son producto de la falta de resultados. Y ojo que yo soy el peor en dar este consejo, estoy igual que vos, terminé con varios proyectos en la nada, pero un poco intencionalmente, nunca prentendí terminar nada. Más bien lo hice para chocarme con los problemas del desarrollo, esto siempre me interesó más que el juego en sí, incluso te diría que me aburre un poco la parte de desarrollo de juegos.
  6. Hola, abrí la previsualización, en las opciones de importación, si tocás el offset y el modelo sube o baja, entonces funciona. Eso seguramente pase porque se este ajustando la animación de un solo clip (o de algunos sí y de otros no), pero cuando el animator pase a usar el otro clip vuelva a la posición de este último. Osea, la posición del personaje es la misma (la del character controller, esta no cambia), pero si tenés diferencias entre las animaciones te van a aparecer inconsistencias. Por eso siempre es recomendable crear las animaciones respetando el pivot (puede haber excepciones, como el salto por ej) . Estas opciones te deberían dar la posibilidad de "re-calcular" dicho pivot, medirlo desde los pies, usar centro de masa, etc.
  7. No, funciona siempre, incluso para Generic también. Si usas o no root motion no influye en este caso, el clip se ve afectado por el offset siempre. Por ej, si vas a tener un personaje controlado por scripts (sin root motion), para idle, walk y jump (o similar) yo usaría un BakeIntoPose de posición Y basado en Feet. Te soluciona cualquier diferencia de altura automaticamente, haciendo root = posición entre pie izq y der. Si creaste el clip pensando en esto (como debería ser) podés usar Original también, debería dar el mismo resultado (o muy parecido).
  8. Jaja yo tampoco, nunca les había dado bola. Hace poquito tuve que implementar dos nuevas abilidades: ladder climbing y ledge hanging (para este asset). Esto sumado a root motion y blender me hizo sacar varias canas 😵
  9. Hola, tuve que lidiar con esto recientemente. Andá a los clips de animación importados, y modificá el offset del Root Transform Position (Y). Si tu personaje ya está animado y modifica alguna propiedad de su root bone (por ej al hacer un salto), podés forzar que el cambio sea nulo (altura, plano XZ o rotación) con solo poner Bake into pose. Por ej, si aplicás esto a la posición Y, la altura del root será 0 (además podés seleccionar qué referencia usar).
  10. lightbug

    la chorrimanguera

    Excelente el efecto, seguramente sean unos 500 hinge joints. A quién le importa la optimización, estamos en 2020, eso se arregla con más Hardware 😅. Me enteré por este hilo que salió el "The last of us 2" y me sorprendió como en los relacionados de Youtube me aparecían "Esto es tan malo que ni puedo terminarlo" o "esto es basura", o similar. Me fui a metacritic y noté que tiene un 40/100 😮 (de usuarios, obviamente).
  11. Mirá los métodos públicos: https://docs.unity3d.com/ScriptReference/Animator.html Play Plays a state. PlayInFixedTime Plays a state. CrossFade Creates a crossfade from the current state to any other state using normalized times. CrossFadeInFixedTime Creates a crossfade from the current state to any other state using times in seconds. Si te sirve el "Animation" dale pa' lante. Una vez escuché a Ian Dundore (uno de los cracks de optimización en Unity) decir que el componente Animation es simple, versátil, rápido y excelente en muchas situaciones (más de las que uno se espera), que no se lo va a remover de Unity.
  12. Yo tampoco entendí absolutamente nada xD. Mi consejo @nomoregames es que si esto no es un juego terminado (😉), definitivamente lo transformes en una "demo build". Podés incluir textos con instrucciones, que indiquen a los jugadores de qué trata un poco el juego, los controles, qué es lo que hay que hacer, cosas así (todo "in-game"). Esto si querés que tus testers prueben directamente las mecánicas del juego (sin andar con vueltas). Claro que estas ayudas (propias de la "demo build") no te servirían de nada si lo que buscas es lo opuesto, es decir, evaluar la comunicación entre juego y jugador (se me viene "The witness" a la cabeza, y el diseño progresivosde algunos de sus puzzles). Que dicho sea de paso, todos fallamos espectacularmente en esto. Saludos. PD: Ni me tomé el trabajo de leer las instrucciones en el post original, quería ver si esto que dije antes se cumplía o no.
  13. jaja Sí, si usas un Humanoid te va a dar por resultado un esqueleto fácilmente interpretable por otros Animators, un Avatar. En mi caso yo exporto mi esqueleto usando IK (IK Constraints) para pies (+rodillas) y manos (+codos), los pongo a todos no deformables, y los ubico fuera de la jerarquía de huesos "reales". Ej (todos los "IK" están fuera de "Hip"): Si animás los IK en Blender, en Unity no habrá problemas (nunca tuve problemas en Humanoid ni en Generic). Eso sí, no existirá relación directa entre IK de Blender e IK de Mecanim, ya que este último los genera usando el Avatar (Por ej: de hombro izq a mano izq). El resto (desde mi experiencia) es hacer Matches tratando de coordinar un IK con tal objeto en el mundo, o simplemente modificar el peso y valor del IK en cuestión. No podría ayudarte mucho con esto, tengo "Based Animation" activada en el tab Animation de las opciones de exportación 🤷‍♂️.
  14. Podrías considerar que el juego se encuentra en el estado "menú" o "UI" (cuando abrís tu menú), y en dicho estado simplemente no procesar el raycast selector de objetos. Ayudaría si subís el código encargado de seleccionar objetos. El graphic raycaster opera con UI: Graphic Raycaster El Graphic Raycaster es utilizado para raycast (emitir rayos) contra un Canvas. El Raycaster mira todos los Gráficos en el canvas y determina si uno de ellos ha sido golpeado. Si seleccionas objetos 3D usando Physics.Raycast, no estoy seguro de que este puede ser bloqueado (como un raycast de UI).
  15. xD naa hombre, te queremos. De hecho, es maduro que alguien responda así 👍, en la mayoría de los casos siempre hay algunas revueltas, insultos y demás. Supongo que no tendremos que mandar a matarte (por ahora ).
  16. Mmm no lo se Rick, parece falso ... Tampoco lo entenderías (sin ser peyorativo), primero porque esto no se explica así. Además de que la pregunta suena a "atajo", que ya es algo incómodo para la persona que pretende ayudarte. No estaría tan seguro de eso, me explico... En mi tiempo en la facultad tuve la suerte de cruzarme con profesores bien hijos de puta, que si les preguntabas algo que estaba en el libro (cosas muy obvias claro) te humillaban (un poco en joda) en frente del grupo. En realidad estaban incentivando a tres cosas muy importantes: Que el alumno siente el culo en la silla, que sepa usar el material disponible (es decir, leerlo al menos). Que el alumno no suelte la lengua por cualquier cosa en clase. Es decir, hay que estar algo preparado (o al menos entender el tema previo) antes de hablar por hablar (sí, había algunos que paraban la clase como 15 veces por día). Que en una consulta, el tiempo empleado realmente valga la pena (para ambos, alumno y profesor). Todo esto desemboca en el respeto al otro (falta de respeto no es necesariamente insultar al otro, aunque podría pasar). Así que, imaginate lo que un "master" siente cuando lee "Si tubierais la amabilidad de hacer un pequeño script... algo fácil de entender" de un tema super básico (que es la base de), y super bien explicado y ejemplificado en casi cualquier medio (blogs, tutoriales, documentación, libros, videos, Unity, etc) como lo son las 👉 clases 👈. Esto a mi me dice que de tu lado estás haciendo cero esfuerzo, y que yo tengo que laburar por vos. Es una relación unidireccional. Si esto pasa seguido, lo más seguro es que empiecen los comentarios un poco desagradables, se empieza a notar ese roce poco a poco. Lo más loco es que seguramente que no surja de malas intenciones tuyas, pero sin darte cuenta estás provocando exactamente esto (y más acá que nos conocemos todos). Mi consejo (en general): Limitar las preguntas (vos mismo dijiste que hacías una tras otra --> "... por aquí mas de un año y sigo haciendo las mismas preguntas idiotas. ") Apuntarlas a algo en concreto, que no sean "Haganme un script que explique el origen del cosmos" ... Por ej: "¿En qué contexto debería utilizar una clase en Unity? Por qué no utilizar una struct para esto?" Preguntar por recursos de ser necesario, si no sabes donde buscar está perfecto. El hecho de preguntar por recursos le dice a quien te ayuda que por lo menos te esforzas en investigar antes. Que no se mal interprete, es no es una evaluación ni nada por el estilo (aunque pueda sonar a una cuando digo "desmuestra a quienes te ayudan tal o tal cosa"). Por ej, yo no sé nada de VR o XR (ni siquiera sé la diferencia entre estos 😆), pero sé que @iRobb la tiene clara (podría decir lo mismo de Networking y @francoe1 ). Sería super irrespetuoso de mi parte inundarlos de preguntas a la primera (ya sea directamente o creando un hilo), por lo menos me dedicaría una semana a investigar por mi cuenta (de ser posible). En caso de no llegar a nada, o verme realmente perdido, bueno ahí sí acudiría a ellos, mencionando mis logros en lo que respecta al tema, mis avances, dónde investigué, qué documentación visité, etc. En fin, mi opinión.
  17. Gracias por la info y los links 👍
  18. Esto: if(attacking){ anim.SetTrigger("Attack"); attacking= true; } else { attacking = false; } dice que si attacking es verdadero entonces attacking es verdadero. Lo mismo para el caso falso, quizás sea alrevés?
  19. ¿Cuál es el "emulador"? Probaste haciendo una development build? Probaste usar otra versión de Unity? (qué versión estás usando?) Salen tantos bugs nuevos version a version que ya perdí la esperanza, a veces cambias de versión y algo que tendría que andar no anda, un desastre Unity.
  20. Los dos primeros están pensados como de 2 orden, es decir, están orientados a una aceleración (2do orden), que modifica una velocidad (1er orden), y esta a su vez una posición (orden 0). Yo los pienso como una aceleración/cambio de velocidad ponderado/a. Los dos primeros de 2do orden, los últimos modos asociados al primer orden. Creo que la confusión viene a la hora de definir un valor en concreto. Por ej, centrandonos en un valor (así se hace más intuitivo). Si tenés un cuerpo de m=1kg (así uso Accelerate y VelocityChange directamente) y le indicas un valor de 1 a ambos métodos, obtenés: Accelerate = 1 m/s^2 (constante)---> va a incrementar su velocidad 1 m/s en 1 segundo (de ahí el m/s^2) VelocityChange = 1 (un frame)---> va a incrementar su velocidad 1 m/s de un cuadro a otro. Quizás por eso el temita del delta time (?). Fijate que el resultado claramente no es mismo, si consideras la velocidad vs el tiempo, en uno tenés un escalón de velocidad (de 1, para el ejemplo), cuando en el otro tenés una recta lineal con pendiente igual a la aceleración (1 en el caso del ejemplo). Uno está pensado para ser usado constantemente frame a frame, el otro para ciertos momentos (o no, acá podés ser creativo). Caso super clásico, un salto. Si vas a saltar querés indicar una velocidad inicial (sea velocity change o impulse), en cambio si vas a usar Accelerate (o Force) vas a tener que apuntar a un valor muchisimo mayor, ya que la recta lineal deberá tener una pendiente muy grande para que de un frame a otro se refleje ese gran cambio de velocidad (con el escalón no tenés este problema). Eso sí, tenés que reducir este valor luego de realizar el salto (osea, no aplicarlo constantemente). Con VelocityChange no andas a las vueltas, indicas el valor deseado deseado para un frame y listo. Por lo menos mi experiencia con ambos es esta.
  21. Felicitaciones! adoro los metroidvania. Hay demo? (más orientada a controlar el personaje que otra cosa, una pequeña escena con elementos básicos del gameplay y nada más) cosa de darte algun feedback. Desde mi punto de vista, estaría genial si pudieras compartir: Tus mecánicas de retroceso temporal (supongo que a lo Braid) La interacción entre personaje y soga (hinge joints quizas?). Coincido con @francoe1, cualquier experiencia relacionada con Steam es siempre bienvenida. Le encuentré dos cositas mirando el trailer, nada de otro mundo, pero sí me llamaron la atención: Muchos te van a comparar con Limbo (creo que el 90% de los comentarios de este hilo ya mencionan Limbo jaja). No es que sea algo "malo", pero te van a medir (visualmente hablando) de Limbo para aquí o para allá. Está perfecto si esto es lo buscado. Por ejemplo, del 0:00 al 0:03 nunca se me habría pasado Limbo por la cabeza ... después del segundo 0:03 se ve el clásico pastito a lo Limbo (quizás este sea el principal desencadenante?). Cosa mía, mirando el trailer habría jurado que el personaje tenía una venda en la cabeza. Una vez que vi la portada del juego me di cuenta que era el pelo rubia/blanco. No se si esto te sirve o no, quizás el pelo es demasiado blanco? quizás le falte un pequeñito sombreado para diferenciar el pelo de la piel? no se, no soy un artista. Una última pregunta, con respecto a los requerimientos, en la página de Steam dice: Gráficos: Nvidia GeForce GTX950 o mayor ----> Tanto requiere? Saludos.
  22. Si el problema es el AddForce (muy probable, porque los cambios directos de velocidad no influyen en esto) podés ignorar la masa de dos formas: 1 ------------------------------------------ La fuerza es el producto de la masa y la aceleración. F = m * a ---> a = F / m Cuando agregás una fuerza lo que estás haciendo es "acelerando considerando la masa". Si lo que querés es ignorar la masa, tenés que multiplicar esa fuerza por la masa. De esta forma (hablando de valores) la fuerza es equivalente a la aceleración. Ej, se le aplica una fuerza de 10 N(Newton) a dos objetos, uno de 1kg y otro de 10kg de masa. Las aceleraciones te quedan: F(1) = 10N = 1 kg * a ---> a = 10 m/s^2 F(10) = 10N = 10 kg * a ---> a = 1 m/s^2 Como ves la masa afecta. Si ahora multiplicas la fuerza aplicada por la masa: F(1) = 10N * 1 = 10N = 1 kg * a ---> a = 10 m/s^2 F(10) = 10N * 10 = 100N = 10 kg * a ---> a = 10 m/s^2 2 ------------------------------------------ Existe una forma más fácil, si estás en 3D podés valerte del "ForceMode": Force Add a continuous force to the rigidbody, using its mass. Acceleration Add a continuous acceleration to the rigidbody, ignoring its mass. Impulse Add an instant force impulse to the rigidbody, using its mass. VelocityChange Add an instant velocity change to the rigidbody, ignoring its mass. Probablemente el modo "Acceleration" es lo que buscas (muy seguramente opere igual que la solución 1).
  23. También podés cambiar la iluminación ambiental, si te vas a Lighting Settings podés usar diferentes esquemas (Skybox, Gradient o Color).
UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...