Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 08/18/2020 in all areas

  1. 3 points
    Este código lo hicimos en otro post. Pásale una List de elementos y te los posicionará de manera aleatoria: public void shuffle<T>(IList<T> list) { System.Random random = new System.Random(); int n = list.Count; for (int i = list.Count - 1; i > 1; i--) { int rnd = random.Next(i + 1); T value = list[rnd]; list[rnd] = list[i]; list[i] = value; } }
  2. 3 points
    hola a todos. acabo de subir un nuevo trailer a Youtube
  3. 2 points
    Muy buenas a todos, abro este post para exponer una problemática que lleva azotando a este foro hace tiempo ya. Soy consciente de que muchos de vosotros lo pensáis, pero no decís nada por medio a represalias, pero ya estamos hasta las narices y no nos callaremos mas, no me importa sacrificarme por esta causa... y es que estamos hartos de los memes de los Simpson, en serio... ay miles de cosas mejores... rick y morty, south park, futurama... incluso los memes de bob esponja, pero por dios... ya basta de los Simpson. Gracias por vuestra atención
  4. 2 points
    Yo después de leer este hilo:
  5. 2 points
    en este foro obedecemos las leyes de la termodinamica!!!
  6. 2 points
    los sistemas de particulas tienen muchas variables diferentes y si simplemente añades el componente luego tendria que ajustar via script todas la variables para que las particulas sean como deseas... creo que es mejor que crees un Prefab.... creas un sistema de particulas, lo ajustas como quieres que sea, y creas un prefab (arrastras el objeto a donde los assets) luego en el script cuando quieras crearlo lo instancias (Instantiate(objeto, posicion, rotacion))
  7. 2 points
    Hola, se me ocurren dos formas: 1. Usando un evento de Unity. En cada botón tenés eventos disponibles, pero solamente on click (presionar primero, luego al soltar se dispara el evento). Podés implementar algunas interfaces útiles para estos casos como las "IPointerXXXXX". Vas a tener que implementar dos, IPointerUpHandler e IPointerDownHandler. En donde querés usar el estado del botón (usé el componente "Target", en tu caso será el que tenga que ser): class Target : Monobehaviour { bool pulsado = false; public void Pulsar( bool pulsado ) { this.pulsado = pulsado; } //... } Donde esté el elemento UI, agregás este componente (lo llamé "UIButton"): //... using UnityEngine.EventSystems; //<--- public class UIButton : MonoBehaviour , IPointerUpHandler , IPointerDownHandler { public Target target; public void OnPointerDown(PointerEventData eventData) { if( target == null ) return; target.Pulsar( true ); } public void OnPointerUp(PointerEventData eventData) { if( target == null ) return; target.Pulsar( false ); } } También lo podés hacer desde el inspector, con un evento público creo. 2. La otra forma es simular un input directamente usando el nuevo input system. Para esto vas a tener que instalar el paquete del InputSystem, crear las acciones correspondientes con sus bindings (conexión entre accion y dispositivo de entrada), y agregar donde tengas el elemento UI un componente que basicamente simula uno de estos bindings (perdón no me acuerdo su nombre). Luego en tu "Target" usas el estado de esta acción. Puede sonar a mucho de golpe, si estás familiarizado con el nuevo input system debería ser fácil.
  8. 2 points
    Hola, He incoporado un vídeo nuevo a la serie. En este entreno dos agentes a la misma vez, el segundo agente tienen unas pequeñas modificaciones que hacen que se dedique a empujar y molestar al player. Es decir, no tan solo intenta llegar al premio, sino que tambien intenta impedirle al player llegar. Me ha sido mucho mas facil entrenar a un segundo agente que crear la logica de programación de un NPC que se dedicase a lo mismo. Empiezo a verle cosilla a esto de los MLAgents.
  9. 1 point
    𝘈𝘱𝘳𝘦𝘯𝘥𝘦𝘳 𝘢 𝘨𝘶𝘢𝘳𝘥𝘢𝘳 𝘥𝘢𝘵𝘰𝘴 𝘦𝘯 𝘜𝘯𝘪𝘵𝘺 𝘦𝘯 𝘧𝘰𝘳𝘮𝘢𝘵𝘰 𝘑𝘴𝘰𝘯 𝘶𝘵𝘪𝘭𝘪𝘻𝘢𝘯𝘥𝘰 𝘤𝘭𝘢𝘴𝘦𝘴 𝘴𝘦𝘳𝘪𝘢𝘭𝘪𝘻𝘢𝘥𝘢𝘴, 𝘦𝘴𝘵𝘰 𝘱𝘶𝘦𝘥𝘦 𝘶𝘵𝘪𝘭𝘪𝘻𝘢𝘳𝘴𝘦 𝘱𝘢𝘳𝘢 𝘨𝘶𝘢𝘳𝘥𝘢𝘳 𝘦𝘭 𝘱𝘳𝘰𝘨𝘳𝘦𝘴𝘰 𝘥𝘦 𝘭𝘢 𝘱𝘢𝘳𝘵𝘪𝘥𝘢, 𝘴𝘤𝘰𝘳𝘦, 𝘥𝘪𝘢𝘮𝘢𝘯𝘵𝘦𝘴, 𝘪𝘯𝘷𝘦𝘯𝘵𝘢𝘳𝘪𝘰, 𝘪𝘵𝘦𝘮𝘴, 𝘦𝘵𝘤. 𝘛𝘢𝘮𝘣𝘪é𝘯 𝘷𝘢𝘮𝘰𝘴 𝘢 𝘷𝘦𝘳 𝘭𝘢 𝘧𝘰𝘳𝘮𝘢 𝘥𝘦 𝘤𝘢𝘳𝘨𝘢𝘳 𝘦𝘭 𝘑𝘴𝘰𝘯 𝘺 𝘳𝘦𝘤𝘶𝘱𝘦𝘳𝘢𝘳 𝘭𝘢 𝘪𝘯𝘧𝘰𝘳𝘮𝘢𝘤𝘪ó𝘯 𝘨𝘶𝘢𝘳𝘥𝘢𝘥𝘢. Espero que les sirva! saludos
  10. 1 point
    Buenos días, parece que es un error en Unity para Linux: "LINUX EDITOR RETURNS THE "O" KEY'S KEYCODE WHEN THE SPACE KEY IS BEING PRESSED" Misterio resuelto. Un saludo, programada.
  11. 1 point
  12. 1 point
    Es imposible saber qué está fallando y cuándo lo está haciendo. Para eso tenés herramientas como el profiler, que te dice cuanta memoria estás usando, procesamiento en general (script por script, por ej podés hasta sacar cuando tarda un Raycast en procesar una order, usando Deep Profile) y más. Existen cosas generales que podés hacer, como por ejemplo: Usar un sprite atlas (o sheet?) en vez de muchos sprites por separado. Si un sprite es muy pequeño no necesita estar super detallado (alta resolución). usar físicas menos complejas donde no se requieran (si fuera el caso). Ej no es lo mismo evaluar cientos de circulos vs circulos que evaluar polígonos vs polígonos. No generar basura constantemente (por ej llamar a Camera.main o GetComponent cuadro a cuadro).
  13. 1 point
    primero deverias buscar el problema. por que tiene bajo rendimiento? - es por culpa de los scripts? trata de simplificar cosas, igual alguna cosa se puede hacer en coroutines a la largo de varios frames en vez? almacena variables que vallas a utilizar varias veces en vez de buscarlas, calcularlas, o cogerlas con getComponent.... y hay muchas mas formas de "optimizar" el codigo... - es por culpa de los graficos? reduce el tamaño de algunas texturas (en movil es mejor que ninguna supere los 512*512). optimiza los mesh (si los hay) siempre se puede borrar poligonos que no se ven, porejemplo los que dan cara al suelo... utiliza shaders mas simples que le cueste menos de calcular.... y, igual que con los scripts, hay mas formas de optimizar los graficos... - ...o puedes ser cosa de las physics, del garbage collector... o incluso de la version de unity que utilices (en algunas los builds para movil tienen mejor rendimiento que en otras) como dice @iRobb es una pregunta muy compleja, habria que tener acceso al proyecto entero y tirarte mucho rato para ver como optimizarlo bien...
  14. 1 point
    Ah ok ahora tiene más sentido. De lo que sé, un prefab como asset puede tomar referencias solo de assets, por ejemplo de otros prefabs. Si querés meter objetos de la escena (o componentes de estos) no te va a dejar. Al revés sí podés hacerlo, es decir que si el prefab está instanciado o metido en la escena (tecnicamente sigue siendo un prefab, ya no un asset (?)) podés asignar cualquier tipo de referencia, de escena o cargarla desde assets. No se si podés imponerle a Unity que asigne cualquier tipo de objeto en cualquier lado. En principio no tendría sentido, ya que los prefabs (assets) van a ser compartidos durante todo el juego, si uno de ellos pierde la referencia de uno de sus objetos (por ej porque la escena cambió) sería catastrófico. El tema es que podés tener prefabs en escena, o prefabs en el proyecto, por eso no me queda en claro bien de donde a donde querés hacer lo que querés hacer. Asumo que querés asignar de escena a asset. Saludos.
  15. 1 point
    hola existe la funcion Resources.Load tienes que crear una carpeta dentro de assets que se llame "Resources" y meter las cosas ahi... (puedes hacer carpetas dentro de esa carpeta para tener las cosas ordenadas) si es solo texto lo que quieres cargar te recomiendo que lo hagas en un "xml" y leas el texto desde el. ...de todas formas poner 300 prefabs en el inspector si se puede hacer. puede poner un array de gameObjects (public GameObject[] prefabs;) y poner ahi todos los que quieras.
  16. 1 point
    hola he visto este video en un post de Vandal y no he podido resistirme a compartirlo era de una jam que se ha celebrado entre el 10 y el 12 de julio... ...o de unos locos que se han escapado de un psiquiatrico... no me ha quedado muy claro...
  17. 1 point
    Hola gente, tengo dudas sobre los renders, uso blender pero si renderizo no se aplica en unity. El caso es que estoy haciendo una app para mobil, no es nada solo se ve un jardin, y me gustaria saber si existe algun modo de renderizar desde blender, o si se puede usar v-ray, luminion, etc... gracias de antemano. :)
  18. 1 point
    a losiento crei que tenias un error, es muy sencillo: (codicion?true:false;) si la condicion es verdadera va a devolver el valor en la seccion true, sino el valor en la seccion false. Entonces si la velocidad de rb es superior a la velocidad de la camara entonces moveSpeed va a ser igual a la velocidad de rb sino va a ser igual a la velocidad de la camara. en este caso, la linea de codigo la podrias cambiar por float moveSpeed = max(rb.velocity.magnitud, cameraSpeed);
  19. 1 point
    Pues supongo que es lo que debería ser 😂 Kudos a @francoe1 por el montaje del vídeo. Gracias compañero!
  20. 1 point
    podrias re escalar el objeto y después moverlo, transform.localscale.x += newsize; transform.position.x += newsize/2;
  21. 1 point
    Teaser Trailer. Espero os guste:
  22. 1 point
    Muy buenas, Tal y como comenté en mi post de presentación, iba hablar del videojuego que estoy desarrollando, Laboratory Adventure II. En el twitter de IasseiGames acabo de anunciar que el juego podrá jugarse en Early Access en 2021, junto a un tráiler: En Laboratory Adventure II, el jugador se pone en la piel de un científico estadounidense que hace años creó una horda de mutantes que amenazaban con acabar con la humanidad. En esa ocasión, los mutantes fueron derrotados fácilmente. Sin embargo, el científico cometió un error fatal: en lugar de buscar un antídoto contra estos mutantes, solamente se limitó a matarlos. Ahora, varios años después, su error le está costando caro: acaba de aparecer un rebrote de mutantes, siendo estos más variados, agresivos y más difíciles de matar. Tu deber es encontrar los ingredientes adecuados para crear un antídoto y acabar con el rebrote. Tu suerte depende de muchos factores; además de combatir a los mutantes, la batería de tu linterna puede jugarte muy malas pasadas... En este proyecto estoy trabajando yo solo, pero no descarto que se puedan unir más personas en un futuro. No tengo expectativas muy altas, ya que es el primer juego serio que estoy desarrollando. Lo considero como un punto de inflexión para entrar en un ámbito más profesional. Con acabar el videojuego y con que lo jueguen un número decente de personas (con alrededor de 100 estaría más que satisfecho, pero menos también) Espero que os guste. A partir de hoy, iré posteando todos los avances que vaya haciendo, lo haré de forma más periódica en Twitter, pero aquí postearé los avances más significativos. Os invito a seguirme en mi cuenta de Twitter para enteraros de lo último del videojuego: https://twitter.com/IasseiG
  23. 1 point
    dependera de como quieras que sea el escenario (la imagen) si va ha haber cosas repetidas (arboles, rocas, cachos de camino, secciones con hierva, o secciones de tierra... repetidas) pues sera mejor que sean "mosaicos"... en cambio si todo va a ser diferente y no va a haber nada repetido y todo a a ser diferente, o va a haber muy pocas cosas repetidas en esa imagen de 4000*4000 pues adelante, entonces esta bien.... aunque en ese caso tambien podrias "partirla" en 16 (4*4) imagenes de 1000*1000 y seria mucho mas optimo que una sola imagen de 4000*4000 otra cosa: es mejor que los tamaños sean exponencial de 2... (2, 4, 8, 16, 32, 64, 128, 256...) ..es decir, imagenes de 512*512, 1024*1024, 2048*2048, etc
  24. 1 point
    @francoe1 porque no se crea una sub-seccion para preguntas mas basicas? tipo nivel bajo, medio y avanzado, asi se filtraria mejor las preguntas
  25. 1 point
    En la anterior entrada hablé sobre trigonometría, repasando las razones trigonométricas y viendo el teorema de pitágoras. Si no lo recuerdas o has llegado nuevo aquí, míralo antes de continuar (enlace debajo). Trigonometría Vectores Matrices Funciones Introducción Si estás familiarizado con motores de videojuegos como Unity, conocerás el concepto de vector ya que se usa habitualmente. Pero ¿qué es realmente un Vector? Un vector básicamente es una flecha que apunta en una dirección y que tiene una longitud concreta: Esto sería un ejemplo de un vector y cualquier flecha apuntando en cualquier dirección sería otro ejemplo. Pero ¿cómo representamos esto? Para poder hacerlo tenemos que llevarnos nuestro vector a un sistema de coordenadas (x e y) y establecer el origen del vector en el centro del sistema. Por si no recuerdas que era un sistema de coordenadas, es una forma de visualizar un punto en el espacio. En este caso el espacio es 2D por lo que se representa con dos líneas, una horizontal (representado por el valor X) y otra vertical (representado por el valor Y) que se cruzan en un punto, llamado centro: Así quedaría nuestro vector anterior dentro de un espacio de coordenadas. Esto, por ejemplo, podría representar el movimiento de una nave en su proceso de despegue. Comienza en la posición (0,0) y sigue en la dirección del vector hasta llegar a su objetivo. Teniendo en cuenta que X es el valor horizontal e Y el valor vertical, el vector sería (2,1) Pero ¿qué podemos hacer con esto? Como has visto puedes representar movimientos con ellos, por ejemplo. Pero para ver de forma práctica su uso vamos a usar Unity3D. Cualquier versión te servirá para este propósito puesto que solo vamos a tocar código básico. En mi caso usaré la versión 2020.1. Si usas otro motor la teoría sigue siendo válida pero tendrás que buscar la forma de adaptarlo por tu cuenta. Unity internamente usa vectores para colocar un objeto dentro de la escena (realmente esto es incorrecto ya que usa una matriz, pero no nos adelantemos). Si vas al componente Transform (crea un gameobject nuevo si no tienes ninguno) te encontrarás con este Vector3 (un estructura propia de Unity) que contiene 3 valores: Estos son la posición en X,Y,Z. Pero ¿pero qué son estos valores? Pues al igual que la gráfica anterior nos indican que desde el centro del mundo hasta la posición de este objeto el vector es (0,0,0). Vamos a ver qué podemos hacer con esto. Para ello creamos un objeto de nombre Player y otro de nombre Target. Los colocamos en diferente posición y le asignamos diferentes iconos para poder diferenciarlos: Recuerda que puedes cambiar el icono en la siguiente pestaña: Una vez hecho esto vamos a crear un nuevo script de nombre Player y lo vamos a añadir al objecto Player. En este script vamos a añadir una variable Transform pública de nombre target y vamos arrastrar nuestro Target a través del inspector. Con esto tendremos acceso al vector de posición del Target desde nuestro Player. Ya tenemos acceso a los dos vectores de posición, el del personaje y el del objetivo. Sabiendo esto ¿cómo hacemos que el personaje se mueva hacia el objetivo usando vectores? Pues aquí llega la parte interesante ya que si restas el vector de posición del objetivo con el vector de posición del personaje, el resultado es el vector necesario para llevar el player al objetivo. Veámoslo gráficamente creando la siguiente función: Si pulsamos play al añadir este código, veremos cómo el personaje se mueve hasta la posición del objetivo. Vale parece que se mueve, pero quiero más. ¿Que tal si medimos la distancia que hay entre uno y otro antes de moverlo? Para esto vamos a recordar la trigonometría que aprendimos en la parte anterior. Magnitud La magnitud de un vector es la distancia que hay entre dos puntos. En nuestro caso sería la posición del personaje y nuestro objetivo. Para calcularla solo tenemos que aplicar la fórmula de la distancia. Esta fórmula es simplemente el teorema de pitágoras disfrazado, y lo vamos a ver en la siguiente imagen: Como puedes ver, nosotros lo que queremos calcular es la distancia (h) por lo que podemos convertirlo en un triángulo añadiendo X e Y. Ahora solo tenemos que usar pitágoras para despejar h. ¿Lo recuerdas? Vamos a resolverlo en código. Para ello vamos a crear una clase estática nueva llamada BasicMath donde vamos a ir añadiendo nuestras funciones matemáticas a partir de ahora. Seguiremos usando Mathf (Unity) o Math (System) para realizar las operaciones básicas que se salen del objetivo de este tutorial. Mencionar que todos los cálculos e igualdades que haremos aquí serán basados en 2 dimensiones. Una vez se han entendido correctamente los cálculos, solo hay añadir la componente z. Esta sería nuestra implementación del teorema de pitágoras. Para ver la distancia simplemente podemos añadir un log en nuestra función MoveToTarget: Si estás familiarizado con Unity ya sabrás que por defecto nos soluciona todos los problemas de vectores con su estructura Vector. Podemos acceder directamente a la magnitud de un vector desde dentro del mismo de la siguiente forma: Como puedes ver, ambos resultados son iguales, aunque nuestra implementación es menos óptima que la que usa internamente Unity. Por lo que esta clase BasicMath y todo lo que contenga es únicamente para uso educativo. La magnitud tiene un pequeño problema y es que hacer una raiz cuadrada es algo costoso a nivel computacional. Por eso habitualmente se usa el valor antes de pasar por la raiz cuadrada. Seguirás teniendo un valor que representa la distancia pero será más eficiente. Podemos crear esta implementación de la siguiente forma y equivale al SqrMagnitud de la clase Vector: Esto es genial, tenemos al personaje moviéndose al target y conocemos su distancia hasta él. Pero no queremos que el player avance directamente hacia el objetivo, sino que lo haga poco a poco a la velocidad que nosotros queramos. Para esto vamos a necesitar normalizar nuestro vector. Normalización Normalizar un vector es cambiar su longitud a 1, manteniendo su dirección. En nuestro caso de ejemplo, el vector “dir” que tenemos. Al cambiar su longitud a 1 podemos controlar la velocidad de movimiento mediante un valor multiplicador. ¿Cómo calculamos el vector normalizado (no confundir con el Vector normal)? Dividiendo el vector por su magnitud: Podemos implementar rápidamente esto en nuestra clase BasicMath: Podemos ver que equivale al valor normalized de la clase Vector: Una vez tenemos el valor normalizado, podemos multiplicarlo por un valor y hacer que el personaje se mueva en función del tiempo: Vamos a tener que pasar nuestra normalización a Vector3 ya que estamos trabajando en dos dimensiones y la posición añade la Z (aunque como este caso sea 0). Si modificamos el valor speed podremos hacer que el personaje cambie su velocidad al moverse a través del vector. Antes de continuar me gustaría darte otra forma de mover un vector de un punto a otro. Pero en lugar de basado en la velocidad, basado en un valor comprendido entre 0 y 1. Cuando el personaje está en su posición inicial, el valor es 0 y cuando llega a su objetivo es 1. Esto es llamado interpolación (Lerp). Interpolación Para interpolar un vector simplemente vamos a sumarle al vector inicial, el vector de dirección al objetivo por un valor t (comprendido en 0 y 1). Veámoslo en código: La primera línea limita la t entre 0 y 1. La segunda simplemente suma al vector de origen, el vector dirección multiplicado por t. Si la t es cero devolverá el valor “a” y si es 1 devolverá el valor “b”. Con el siguiente código podremos probar esta funcionalidad nueva: Tenemos que crear un valor t (el atributo Range nos ayudará a limitarlo entre 0 y 1) y un Vector3 que guarde la posición inicial. Esto es necesario porque si le pasamos la posición actual al Lerp los resultados se irán actualizando al ir moviéndose y el resultado no será el que buscamos. Comentamos la anterior MoveToTarget y añadimos la nueva en la función Update. De esta forma si pulsamos Play tendremos un valor t en el inspector que si vamos moviendo entre 0 y 1 hará que nuestro player se desplace más o menos cerca del target. Hay otros tipos de interpolación que veremos en el apartado de Funciones en próximas partes de este tutorial. Una vez tenemos esto, vamos a pasar con una de las operaciones con vectores más importante. Producto Escalar El producto escalar (dot) es una operación entre dos vectores que nos devuelve un valor. Este valor nos da información muy útil sobre estos dos vectores: Si este valor es cero: el ángulo entre los dos vectores es 90 grados por lo que son totalmente perpendiculares. Si este valor es negativo: el ángulo es mayor a 90 grados. Cuanto menor sea este valor, mayor será el ángulo. Si este valor es positivo: el ángulo es menor que 90 grados. Cuanto mayor sea este valor menor será el ángulo. Aquí puedes experimentar visualmente con estos conceptos: https://www.fisicalab.com/apartado/producto-escalar La fórmula del producto escalar, siendo “a” y “b” dos vectores, es la siguiente: dot = ax * bx + ay * by Ya conocido el concepto vamos a practicar con él. Primero lo añadimos la función a nuestro BasicMath. Ahora añadimos la función Dot de testeo con lo siguiente: Esto calculará el producto escalar entre el vector del personaje y el vector de dirección. Como ves hemos utilizado el transform.up en lugar de la posición. Este valor indica la dirección del vector hacia arriba teniendo como referencia el tranform. Ya conocerás estos vectores si estás habituado a trabajar con Unity. Podemos verlos mejor aquí: Si usamos estos vectores a la hora de calcular el producto escalar, los resultados serán en función a la dirección y no en función de la posición. El vector de posición no nos indica hacia donde está apuntando, sino su posición con respecto al centro del mundo. Una posición por ejemplo de (3,4,0) no nos es útil para calcular el producto escalar, sin embargo el vector.up (0,1,0) sí, ya que es una dirección en este caso hacia arriba. También hemos normalizado los dos vectores antes del dot para que sea más fácil trabajar con el resultado. Activamos esta función en Update, comentando lo demás (puedes dejar el MoveToTarget si quieres). Si damos Play podemos ir moviendo el target y ver como va cambiando el producto escalar. Pero ¿de qué sirve conocer este valor?. Pues anteriormente vimos que este valor nos da información muy relacionada con los ángulos. De hecho podemos calcular el ángulo entre dos vectores conociendo los productos escalares. Ángulo Para calcular el ángulo tenemos la siguiente fórmula,siendo “a” y “b” vectores: θ = arcocoseno (dot(a, b)) Vamos a añadir esto a nuestro BasicMath. Este resultado estará en radianes por lo que crearemos dos funciones, una en radianes y otra que convierta el resultado a grados. Hemos normalizado ambos vectores antes de hacer el Dot. De esta forma lo hará desde dentro y podremos pasarle el vector sin normalizar. El valor Rad2Deg es el factor de conversión de radianes a grados que es 180 . Esto es un valor constante: No es necesario que añadas tanta precisión, puedes coger los decimales que quieras para este fin. Creamos ahora nuestra función Angle en el Player (puedes sustituir la función Dot ya que no la volveremos a usar). Volvemos a usar el Vector.up y añadimos la función al Update para verla. Para visualizar mejor el ángulo, voy a añadir en el OnDrawGizmos el siguiente código. Esto crea dos líneas que simular el comportamiento de los vectores. Si damos al play podremos ver dos líneas que forman un triangulo, el angulo entre las dos es el que nos está mostrando por consola: Con este valor de ángulos podrías, por ejemplo, rotar al personaje para que siempre mire al target con la función transform.Rotate. Con esto llegamos al final de esta entrada sobre vectores. Ha sido algo básico pero que sirve como punto de partida si quieres profundizar por ti mismo. Como he comentado estos cálculos son teniendo en cuenta solo 2 dimensiones. Te animo a que realices los cálculos añadiendo a las fórmulas una dimensión más. Podéis encontrar el código del proyecto aquí Recuerdo que no soy matemático y que los cálculos que aquí he realizado pueden contener errores o no ser del todo precisos. Cualquier duda o anotación siéntete libre de contactar conmigo. Nos vemos en la siguiente entrada.
  26. 1 point
    Es un problema con el editor, pero para ser más exacto, lo causa el que tengas muchos elementos/componentes en tu Canvas. Me pasó antes, no recuerdo con que versión, (2019.2.0f1 creo), luego de exportar, las letras de mi Canvas se ponían de color negro y hasta perdían el tipo de fuente. Ni reiniciar la escena funcionaban, lo que hacía era reiniciar el editor y se solucionaba. Recomiendo actualizar a una versión LTS, 2019.4 ... es la actual creo, ahí no hay esos errores, pero si persisten, revisa toda la jerarquía de tu Canvas, trata de optimizarlo, no tengas muchos "Layout component" o "Content size filter".
  27. 1 point
    puedes numerar las partes del cero (base) al siete (cabeza) luego hacer un movimiento que se base en el seno y el coseno de un angulo que valla aumentando todo el rato (dando vueltas) multiplicas ese seno cantidad fija y le coseno por otra... y ambos los multiplicas por el numero de objeto (la base como es el cero no se movera, la siguiente, el uno, se movera un poco mas... y la cabeza, el siete, se movera la que mas) usas el resultado para posicionar las partes.... puedes hacer un "Lerp" entre la posicion vieja y la nueva para que quede mas suave.... si el player esta mas cerca de cierta distancia de la planta puedes hacer que entre en funcionamiento otra animacion parecida (con seno y coseno pero mas rapida y con mas movimiento en el eje X... osea: hacer como que se lance hacia el player).... puedes hacer que si el player esta a un lado o al otro se invierta la animacion y la orientacion de los sprites para que la planta mire hacia el lado en el que esta el player
  28. 1 point
    Hola. Me parece que si y pasó lo mismo. El problema era el pivote. Si, era el pivote. Pero me toco corregirlo desde la aplicación con la que cree el modelo. No encontré como se ajusta el pivote desde Unity. Problema arreglado https://youtu.be/p5Xa19OKjNw
  29. 1 point
    Es un problema muy raro, que versión de Unity usas?, Hay algún error en los registros después de exportar?, Prueba a crear un nuevo proyecto, agrega un simple botón que active una imagen en el Canvas (para ver si funciona los Inputs), exporta y ve si funciona, si lo hace, es porque quizá tengas una librería que hace conflicto en tu proyecto luego de compilar el juego.
  30. 1 point
    Disculpen la demora, ha sido una semana algo pesada. Me gustaría compartirles mas imágenes.
  31. 1 point
    Hola, solamente para agregar algo al hilo. Si querés lograr eso vas a tener que trabajar siempre sobre la velocidad actual de alguna manera, nunca escribirla directamente (a menos que esto sea lo que busques). Por escribirla directamente me refiero a que la velocidad sea igual a algo que la tenga en cuenta. // No va a funcionar // El rb puede sufrir modificaciones (debido a la simulación), pero en el FIxedUpdate siguiente estás pisando el valor. // ----------------- // velocidad de 5 m/s rb.velocity = Vector3.right * 5f; // Va a funcionar // el rb va a modificar una velocidad en base a la actual. La velocidad del RB va a estar afectada por la simulación. // ----------------- // aceleración de 5 m/(s*s) (ta en otra escala, lo sé) rb.velocity += Vector3.right * 5f * dt; Más formas de mover un rb con velocity: // Acelerando, podés emplear el mismo drag del RB para lograr una aceleración y velocidad final deseada. rb.velocity += aceleración * dt; // Acelerando, esta vez podés usar un drag dinámico (en tu propio código) y poner el drag del rb a 0. rb.velocity += aceleración * dt * (1 - drag); // Usando SmoothDamp rb.velocity = Vector3.SmoothDamp( rb.velocity , targetVelocity , ref currentAcceleration , smoothTime ); // Usando MoveTowards rb.velocity = Vector3.MoveTowards( rb.velocity , targetVelocity , acceleration ); // Usando Lerp rb.velocity = Vector3.Lerp( rb.velocity , targetVelocity , t ); ─────────────────────────────────────────────────────────────────────────── En el momento de llamar a la fuerza, la velocidad no se modifica, lo que esta llamada hace es avisar al motor de físicias la modifique (le agregue velocidad) en la simulación (con MovePosition/Rotation pasa lo mismo). El tema está en que él no está reflejando dicho cambio en el cuadro siguiente. Pero sí, te entiendo. ──────────────────────────────────────────────────────────────────────────────── Si se mueve y colisiona, o necesita valerse de queries para hacerlo (raycast, sphere cast, etc) ... bye bye transform! bueno no bye bye del todo, todavía es muy importante, pero nada de modificar transforms como sustituto de velocity, force, position, o similar. En estos casos el transform hace de elemento visual (como debería ser), jugar a "dos puntas" con el rb y el transform va a traer posiblemente malos resultados y dolor de cabeza (dependiendo de los casos). En estos casos conviene usar RB para todo, y valerse de la interpolación (para que lo visual se actualice correctamente). Se suele también usar el transform al final de la simulación (LateFixedUpdate) para acomodar (si fuera necesario) la posición "deseada" del jugador (rb.position) y su elemento visual (transform.position). Que dicho sea de paso, una vez que te metés con las físicas estos dos componentes (Rb y T) viven en su mundo y hacen cosas diferentes. Los dos se suelen amigar luego de la simulación (Con un Sync). Saludos.
  32. 1 point
    si quieres que se mueva 7 unidades al segundo seria asi: float speed = 7; transform.position += direccionDeMovimiento * speed * Time.deltaTime; y asi se movera 7 unidades cada segundo hacia la direccion indicada recuerda que "direccionDeMovimiento" tiene que estar normalizado (medir 1) para eso puede hacer direccionDeMovimiento.Normalize();
  33. 1 point
    estas cambiando directamente la velocity del rigidBody, osea que si una fuerza afecta al rigidBody y cbia su velocity.... tu luego haces que el rigidBody la ignore porque sobreescribes su velocity. en vez de sobreescribir la velocity deverias usar AdForce que te valdria tanto como para moverlo como para añadirle la fuerza de una explosion. adForce modifica "internamente" la velocity de RB
  34. 1 point
    hola, en el "switch" deberias incluir un caso "default" por si el numero que compruebas de "currentHealth" no esta especificado en los casos.... switch (currentHealth) { case 1: //haces algo break; case 2: //haces otra cosa break; default: //haces otra cosa diferente break; } asi evitaras errores el codigo del "default" se ejecutara cuando el valor de "currentHealth" no aparezca especificado en los "case" te recomiendo que siempre incluyas un default en los "switch" si quieres lo puedes dejar vacio switch (numero) { case 1: //algo break; case 2: //algo break; default: break; }
  35. 1 point
    @Jesus Guillen el error que sale en la consola, dice que te saliste de los limites del array, verifica la inicialización del array, o tomale una foto para poder ayudarte.
  36. 1 point
    Hola. estoy terminando uno de mis proyectos. se trata de un juego de naves, un matamarcianos (shoot'em up)... con toques de rouge lite. Falta terminar los modos de juego extras (modo arena, modo survival, y modo bossRush). El modo historia esta acabado, con 25 escenarios y 10 escenas especiales.... no es necesario pasar por todas para llegar al final, puedes elegir multiples caminos. (no es lineal). De momento tiene mas de 30 enemigos diferentes (contando los bosses). 16 skills diferentes (armas secundarias) y multiples mejoras para la nave. Banda sonora original con mas de 40 temas. A ver que os parece... vuestros comentarios seran bien recibidos. trailer gameplay: special scenes trailer: boss trailer:
  37. 1 point
    Hola chicos, estoy liado con un rpg de la vieja escuela estilo Final Fantasy IV, estoy haciendo el mapa del mundo con Tilemaps en 2D. Me gustaría que cuando mi personaje pasara a través de un bosque(zona con arbolitos juntos), el bosque tapara a mi personaje hasta la cintura, para que de efecto de estar pasando a través. He probado a cambiar el Order Layer del tile del boque pero eso hace que tape a mi personaje entero. Alguna idea al respecto de como hacerlo? Gracias!
  38. 1 point
    Coincido, me parece una maravilla de juego, alucinante, con una técnica muy bien depurada. Veo los siguientes problemas comerciales: Falta de coherencia gráfica. Ciertos elementos parecen usar un estilo de Arte diferente a otro. Otros contrastan demasiado y otros no lo suficiente,etc. Además, todo parece poco saturado y con la misma importancia. Por ejemplo, la nave protagonista debería destacar muchísimo más. La GUI no le pega nada al juego... Calidad Visual media, mejorable. No me gustan los gráficos de tu juego, me parecen "feos". No sé si es por usar luces y normal mapping en algunos sitios, o porque el diseño de las naves y robots es algo simple. Todos los niveles me parecían iguales o demasiado parecidos. Control confuso. Imagino que está así aposta, pero el ir cambiando la cámara y controles de todo el juego en ciertos escenarios puede confundir al jugador. ¿Opciones, Extras?. No muestras apenas menús del juego, así que no vemos si el juego es 100% "empezar y ya", o tiene algo de carga narrativa... Tampoco se ven muchas de esas posibilidades de mejorar la nave, de las que comentas en tu descripción. Y a partir de aquí, reflexiones: Si no tienes pensado venderlo, y no le das tanta importancia al Arte, todo perfecto y sigue así. Puedes ignorar todo lo que he comentado arriba y acabar el juego, porque está genial. Si tu ilusión es crear una comunidad de fans del juego y tener cierta visibilidad, al menos te recomiendo buscar a un buen Artista, y que te ayude a conceptualizar y diseñar qué estilo le pegaría mejor al juego y cómo debe ser gráficamente cada apartado. En cuanto al cambio de controles en algunas fases, si lo haces trata sobretodo de avisarlo de antemano, y acostumbrar bien a los jugadores. Para que el jugador sepa diferenciar cuando es un control u otro, puedes acudir a un cambio de estilo visual gráfico en todo el juego (p.ej. pasando del modo normal a un modo VR, con todo en neón y líneas vectoriales). Los vídeos muestran perfectamente lo bien pulida que tienes la técnica de programar las oleadas, disparos, los Bosses, y lo más difícil de hacer, la velocidad y dificultad. Así que todo lo chungo ya lo tienes. Enhorabuena, porque es lo más difícil de conseguir.
  39. 1 point
    Por favor, me encanta! Eres bueno. Movimiento rápido y música trepidante. Enhorabuena!
UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...