Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 58,34€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales

lightbug

Registrados
  • Content Count

    2,246
  • Joined

  • Last visited

  • Days Won

    179

Everything posted by lightbug

  1. Uh muy bueno @francoe1, tiene tremenda pinta. Pregunta: ¿Por qué soporta >= 2019.2? PD: Justo justo justo fuí al link de Connect y encontré un errorcito (o quizás es una imagen vieja) en la sección "Info" (de Player and Settings) --> Direaction ... te aviso por si se te pasó.
  2. Jajaj totalmente, acá el uso práctico hace la diferencia. Según Wikipedia: "In mathematics, the quaternions are a number system that extends the complex numbers." ---> a +b i + c j + d k Un número complejo se puede expresar en 2 dimensiones, una para la parte real (que NO acompaña a la "i") y otra para la parte imaginaria (que acompaña a la "i"). Entonces acá se puede decir que un Quaterion se puede expresar con 4 dimensiones. Revisando el código de Unity, un Quaterion es efectivamente un vector de 4x1,: public Quaternion(float x, float y, float z, float w) { this.x = x; this.y = y; this.z = z; this.w = w; } En el mundo matricial la multiplicación de una matriz de (M filas xN columnas ) x (I filas x j columnas): ( M x N ) x (I x J ) .... Es válida o realizable si N = I, es decir --->( M x N ) x ( I x J ) ... y el resultado tiene dimensión MxJ (Extremos) ---> ( M x N ) x (I x J ) Acá dejo un poco de código de Quaternions (sacado del código de Unity). Lo interesante es que estos valores se puede arreglar de tal o tal forma y resultar en vectores, quaternions o directamente matrices de 4x4 (ejemplo: parte las matrices que usan los shader, MVP en OpenGL, WVP en D3D , necesitan agregar una componente a la posición, de Vec3 a Vec4). Basicamente lo que hace Unity es afectar a los factores de tal forma de generar el resultado querido. Acá el operador *(Q,V) ... la regla que mencioné arriba: public static Vector3 operator *(Quaternion rotation, Vector3 point) { float num1 = rotation.x * 2f; float num2 = rotation.y * 2f; float num3 = rotation.z * 2f; float num4 = rotation.x * num1; float num5 = rotation.y * num2; float num6 = rotation.z * num3; float num7 = rotation.x * num2; float num8 = rotation.x * num3; float num9 = rotation.y * num3; float num10 = rotation.w * num1; float num11 = rotation.w * num2; float num12 = rotation.w * num3; Vector3 vector3; vector3.x = (float) ((1.0 - ((double) num5 + (double) num6)) * (double) point.x + ((double) num7 - (double) num12) * (double) point.y + ((double) num8 + (double) num11) * (double) point.z); vector3.y = (float) (((double) num7 + (double) num12) * (double) point.x + (1.0 - ((double) num4 + (double) num6)) * (double) point.y + ((double) num9 - (double) num10) * (double) point.z); vector3.z = (float) (((double) num8 - (double) num11) * (double) point.x + ((double) num9 + (double) num10) * (double) point.y + (1.0 - ((double) num4 + (double) num5)) * (double) point.z); return vector3; } Acá el operador* (Q,Q), Multiplicación de Quaternions (otras reglas): public static Quaternion operator *(Quaternion lhs, Quaternion rhs) { return new Quaternion( (float) ((double) lhs.w * (double) rhs.x + (double) lhs.x * (double) rhs.w + (double) lhs.y * (double) rhs.z - (double) lhs.z * (double) rhs.y), (float) ((double) lhs.w * (double) rhs.y + (double) lhs.y * (double) rhs.w + (double) lhs.z * (double) rhs.x - (double) lhs.x * (double) rhs.z), (float) ((double) lhs.w * (double) rhs.z + (double) lhs.z * (double) rhs.w + (double) lhs.x * (double) rhs.y - (double) lhs.y * (double) rhs.x), (float) ((double) lhs.w * (double) rhs.w - (double) lhs.x * (double) rhs.x - (double) lhs.y * (double) rhs.y - (double) lhs.z * (double) rhs.z) ); } Da miedo ... Lo importante es leer el manual y saber que hace cada método del Quaternion. Cuando apretás el botón del ascensor que hace que el ascensor funcione (para un usuario promedio), lo que importa es saber a qué piso querés ir.
  3. Si solo te importa la presentación de las medallas, diría opción O-P-B. En el caso de un podio olímpico o de carreras, el oro está más alto, en este caso el oro se ve primero (asumiendo que es más llamativo lo primero que se presenta). En muchos juegos el texto del ganador (oro) tiene los colores dorados y muchas veces alguna que otra animación llamativa y divertida, esto podría sumar más que el orden de presentación. La otra opción es presentarlos en vertical (con Oro arriba).
  4. Reglas de oro sin duda alguna, agrego una de Vectores con Quaternions muy útil: - Para rotar un vector usando un Quaternion se multiplica (en este orden): vectorRotado = quaternion * vector
  5. Sí, gracias por mencionarlo. En el tutorial utiliza 2018.3.5, creo que es debido a que el paquete se encontraba en etapa de experimentación UnityEngine.Experimental.Input. Actualmente en 2019.1 el paquete se puede usar con UnityEngine.InputSystem. El tema de las versiones y los paquetes en preview suele confundir bastante.
  6. Jaja yo hacía lo mismo, acá hice un post acerca del hack: http://www.unityspain.com/index.php?/topic/38762-unity-dark-para-versión-̶p̶o̶b̶r̶e̶-free/&tab=comments#comment-145051 Claro, no lo digo por pesado de tener el dark, sino que cuando hacés herramientas muchas veces uno omite la estética y pone un color que quede bien para el skin actual. Después te suelen mandar que no se ve nada en el Dark . Por eso uso directamente los estilos propios de Unity (gracias a la famosa tool gratis que te deja ver los Built-in styles) y que los colores los "decida el editor" cuando se necesario (aunque no es una solución perfecta). Uh muy interesante, gracias por el link. Tengo que ponerme con UIElement, hace tiempo que lo vengo dejando de lado.
  7. Recién he probado la beta y esto un 80% convencido (aclaro, no he metido ninguna de mis tools para verificar compatibilidad), el flat le queda muy bien y a nivel íconos hicieron un gran trabajo. Como soy pobre tengo el skin light de la dark no puedo opinar, me jode las pelotas que todavía los de Unity crean que la gente compra Pro para tener el skin (y sí, va a terminar siendo por esto si siguen así), eso demuestra la madurez de los directivos de fondo. Con respecto a la UI todavía hay cositas que no me agradan, pero eso es por el mismo estilo flat, por ejemplo muchas veces omito algo porque todo se ve tan igual y plano. A nivel de Editor han metido muy buenas opciones, lo de la view camera me parace genial (aunque no se si esto ya estaba), también lo de las tools de escena, el hover sobre los elementos también ayuda. Espero que el nuevo sistema de Inputs se integre, aunque creo que lo van a dejar para 2020. En la beta que probé hay errores muy básicos, por ejemplo das a "New Folder", la crea, pero no deja el foco sobre el nombre (cosa de escribir el nombre de la carpeta), uno tiene que ir y renombrarla cada vez. Otro error grave, cuando creas un nuevo script, antes podías escribir el nombre y la clase se renombraba, ahora se genera un "NewBehaviourScript" y arreglátelas como puedas. No miento, perdí como 45 minutos tratando de ver que estaba pasando, y claro, el error era lo que decía el cartel, pero después de estar 12 años creando clases quién iba a pensar que de golpe decidieron cagarla con el nombre. Como puede ser que versión a versión tengan los mismos errores?? esto se corrige una sola vez y listo, pero Unity se las rebusca para generar nuevos bugs una y otra vez, es increible. Seguro para el lanzamiento oficial todo esto se corrige, y seguramente la UI va a recibir iteración tras iteración de re-diseño, lo cual está bien, recuerdo el primer prototipo mostrado por los devs en el foro oficial y daba calambres, este está muchísimo mejor en comparación.
  8. Acá les dejo un excelente tutorial ( en tres partes ) a modo de introducción al nuevo Input system. Uno de los mejores que vi, los demás videos parecen copy+paste, además de que todos ponen las expresiones lambda sin ni siquiera saber que hacen (o por lo menos da esa sensación). Parte 1: introducción y Setup Basicamente de Input.GetKeyDown(KeyCode.w) a keycoard.wKey.isPressed Parte 2: Binding y Composite Acá explica como se pueden especificar bindings (conexiones entre acciones y dispositivos físicos) visibles en el inspector. Un "Composite" es lo mismo pero para con más de un binding. Parte 3: Input System Asset Se migra todo lo expuesto en la clase a un Asset propio del nuevo sistema, con la ventaja de setear varios ActionMaps (por ej uno para un menu, otro para gameplay, etc) con sus acciones y sus bindings.
  9. Ponelo así mejor (si es que acceleration.x pasa cuadro a cuadro no debería dar problema en FixedUpdate, sino habrá que meter también un update que registre todos los deltas y aplicarlos en fixedUpdate): Rigidbody2D rb2D void Awake() { rb2D = GetComponent<Rigidbody2D>(); } void FixedUpdate() { //es lo mismo que antes (en 2D), Vector2.right es <1,0> // y quité deltaTIme, la simulación pide fuerzas o velocidades, no desplazamientos rb2D.velocity += Vector2.right * Input.acceleration.x * SpeedD; } Yo recuerdo que hice un juego para Android que usaba el acelerómetro, me acuerdo que estuve algun tiempo usando un método X y diciendo "esto no anda!". Al final recuerdo que era otra funcionalidad la que debía utilizar, digo esto porque esto me suena mucho a mi situación. De todos modos acá está la doc oficial: Parte de aceleración (conceptual): As a device moves, its accelerometer hardware reports linear acceleration changes along the three primary axes in three-dimensional space. You can use this data to detect both the current orientation of the device (relative to the ground) and any immediate changes to that orientation. Acceleration along each axis is reported directly by the hardware as G-force values. A value of 1.0 represents a load of about +1g along a given axis while a value of -1.0 represents -1g. If you hold the device upright (with the home button at the bottom) in front of you, the X axis is positive along the right, the Y axis is positive directly up, and the Z axis is positive pointing toward you. Scripting: You can read the Input.acceleration property to get the accelerometer reading. You can also use the Input.deviceOrientation property to get a discrete evaluation of the device's orientation in three-dimensional space. Detecting a change in orientation can be useful if you want to create game behaviors when the user rotates the device to hold it differently. Al final yo creo entender que podés encontrar cambios en la orientación (aunque mencionan aceleración lineal también, por eso es algo confuso) y también la orientación final del dispositivo (?), probá con eso último, no lo se, podría ser que estés modificando Input.acceleration.x solamente cuando estés girando tu movil, probá con deviceOrientation. Saludos
  10. Sí totalmente, muchas veces usan un modelo muy parecido al suelo (que puede confundirse con alguna pequeña elevación) y listo. Otras veces se usan rocas (más común), por ejemplo para presentar la entrada de una cueva.
  11. Exacto, en realidad un script separado para inputs es lo ideal (separado del movimiento). Lo de las OR se lo rob... digo tome prestado a los de Unity , de la serie del training day de 2D (excelente por cierto, va desde personaje hasta audio): Create A 2D Platformer
  12. @Rootet en tu script hay cositas que están bien otras que están mal, por ej: 1) Update para inputs, FixedUpdate para físicas: if (Input.GetMouseButtonDown(1)){ if (corriendo){ } else{ rigi.velocity = new Vector2(velocidad * 1.25f, rigi.velocity.y); } } En update, estás modificando una velocidad, cosa que debés hacer en FixedUpdate, esto se lee como "Si apreto el botón derecho y corriendo es false la velocidad X es el 25% más grande" y esta actualización sucede en un solo cuadro, no cuadro a cuadro. Además si la velocidad es un 25% más grande se supone que corriendo ahora debe ser true pero no, se setea true si apretás el otro botón (en FixedUpdate). ───────────────────────────────────────────────────────────────────────────────────────────────────── 2) Quién es responsable de corriendo? if (Input.GetMouseButtonDown(0)){ if(corriendo){ if ((enSuelo || !dobleSalto)){ sonido.Play(); //Empujón hacia arriba //Opción 1. Metodo up de Vector2 rigi.AddForce(Vector2.up*fuerzaSalto); //Otra opción //Aplicamos una fuerza de 0 en X y de fuerzasalto en Y //rigi.AddForce(new Vector2(0,fuerzaSalto)); if(!dobleSalto && !enSuelo){ dobleSalto=true; } } } else{ corriendo=true; NotificationCenter.DefaultCenter().PostNotification(this, "PersonajeEmpiezaACorrer"); } } Cuando apretás el botón izq y no está corriendo se da la primer vuelta (el else), es decir que se pone corriendo = true. En el siguiente cuadro GetMouseButtonDown no se dispara (por razones obvias) entoces el "if(corriendo)" no se da. Sí se va a dar el "if(corriendo)" en el proximo click. Además, ¿quién pone corriendo en false? Y volviendo al punto 1, solo si corriendo es falso la velocidad aumenta. Una vez que diste click izquierdo corriendo nunca vuelve a false (?). Puede ser que me haya olvidado de algo, muchas veces contesto a la ligera. ───────────────────────────────────────────────────────────────────────────────────────────────────── █████████████████████████████████████████████████████████████████████████████████████████████████████ Podés resolver el problema parcheando if's y demás, pero te diría que de entrada la estructura es muy confusa para una tarea tan simple, tomalo como una oportundad de mejora y experimentá con una nueva, que tenga más lógica y sobretodo que alguien externo al código lo vea y lo entienda al instante, pensá que esto es un salto y una funcionalidad de correr, practicamente no es nada. La lógica que te recomiendo para una mezcla Update + FixedUpdate en un platformer (y con cualquier personaje) es la siguiente (seguramente hay cosas que no definí, solo una idea muy por arriba): // inputs - esto expandilo a todas las inputs que estás esperando, lo mismo con ejes // En este ejemplo está solo correr "Run" (que elegí la leftShift) bool runPressed = false; bool runReleased = false; bool running = false; bool isGrounded = false; void Update() { // Update puede pasar 100 veces más rápido que FixedUpdate (50 fps por default), así que // todos los KeyDown se acumulan, no se setean, así no perdés ninguno en el camino // por acumular me refiero a usar una simple OR runPressed |= Input.GetKeyDown( KeyCode.LeftShift ); runReleased |= Input.GetKeyUp ( KeyCode.LeftShift ); } void FixedUpdate() { //Detectar suelo, determinar direcciones de movimiento, ángulos, etc // Por supuesto acá es donde decís "suelo = true o false" isGrounded = IsGrounded(); // el vector objetivo cuadro a cuadro, no necesariamente el aplicado Vector2 targetVelocity = Vector2.Zero; // bien general un "if( suelo ) .... if( isGrounded ) { //Todo lo que pasa si y solo si el jugador está grounded // en este caso la input a evaluar es run así que if( runPressed ) { running = true; targetVelocity.x = ... } else if( runReleased ) { running = false; targetVelocity.x = ... } } else //Todo lo que pasa si y solo si el jugador NO está grounded { //en el aire no puede correr running = false; targetVelocity.y = ... } //Una vez determinado el estado se aplica el vector obtenido a la velocidad (de la forma que quieras). rb.velocity = ...(dependiendo de targetVelocity) // IMPORTANTE --> Resetear inputs, FixedUpdate ya las usó runPressed = false; runReleased = false; } Animación y movimiento poco tienen que ver, si no ves los efectos en pantalla tratá de exagerar los valores, en vez de 1.25f poné 5f. Igualmente creo que sí, desde el animator podés setear la velocidad del clip (revisá las referencias de Animator o google más rápido), aunque no recuerdo, estoy completamente seguro que para el sistema Legacy (viejo) se puede hacer, pero con el componente Animation. Saludos
  13. Yes! esto es un game changer, eso sí, si el agujero modifica el TerrainCollider.
  14. Nooo man, vos sos amduartev!! jajajaj recuerdo cuando en mis comienzos busqué en Youtube "Unity Horror Game" y salió tu video ... este: https://youtu.be/I4FqzEaAQ2E Incluso hace un año estaba por preguntar por el foro si alguien conocía dicho proyecto de terror y/o al autor. En su momento no podía creer lo bien lograda que estaba la ambientación (incluso ahora, eso demuestra como con shaders viejos, buenas texturas y una point light pueden crear mucho), encima con Unity (que en esa epoca era todo UDK), fue una inspiración sin duda. Digo esto porque vi el video y me recordó bastante a aquella escena (el video hizo de OnTriggerEnter), por más que no sea la misma tienen algo que las relaciona, audio, ambientación, shaders, no se... algo. Apa, Master? De qué pioj?
  15. La verdad es que queda bastante bien, da una idea de cuanto falta para la meta, un estilo kickstarter. Una pregunta: ¿Es posible meter las noticias o el Feed en uno de los paneles laterales? Cosa de cliquear e ir directamente al link (no al topic), por ej con las últimas 5 noticias. Ah mira vos, tiene sentido, era sabido que el Admin y los mods se daban puntos ellos mismos jajaja. Sí, la verdad que están bárbaros, seguramente muchos de los importantes sean "under the hood", siempre se valoran. La galería me encanta, aunque todos los links me dan error. El foro de buenas practicas también me parece genial, aunque siento que el formato blog quedaría mejor, de todos modos la idea es muy buena. Ya que está pregunto, hace unos días me metí a un Topic X y descubro que era capaz de seleccionar la respuesta correcta, siendo que nunca respondí (además de obviamente no ser el autor del Topic). Ahora mismo no recuerdo el topic, pero probé con otros y no pasa lo mismo. ¿Este problema fue notificado? Quizás tenga relación con este punto : " Se ha corregido y vuelto a activar el plugin de Best Answer, para que los elijan qué respuesta es la mejor para resolver un problema. (pulsad la V a la izquierda del post, dónde el autor...) "
  16. Mmm depende, por personaje uno entendería a la típica cápsula (en 3D) visible solo en la escena, invisible en el juego, este sería tu character controller. Por supuesto podés mover algo mediante una animación, el problema con esto es que un character controller no puede ser usado mediante modificación de Transform (o animación), la única manera de aprovechar al CC es usando la función "Move" y esto solamente se puede realizar por código. Por lo que no se que tan válido sea este tipo de "movimiento" ni que tanto estás usando al CC, ya que me imagino que lñas animaciones están haceindo de cinemáticas, en lugar del gameplay típico, es así?. Colliders o Character controllers? Si es CC eso estaría mal, el personaje es una unica entidad, el character controller representa la colisión de cuerpo completo entre este y (por lo general) el nivel (meshes estáticos, dinámicos, triggers) u otras entidades similares (por ej NPCs ), no tiene nada que ver con las colisiones que puede llegar a haber entre distintas partes del cuerpo (Por ej una bala que colisiona con el antebrazo derecho), esto ya sería secundario al CC. En resumen deberías usar un solo character controller que cubra todo el cuerpo, y aplicarle el movimiento a este (de la forma que sea). No me termina de cerrar el caso, osea, no lo puedo visualizar, podrías subir algun gif o video mostrando la situación. En resumen te diría que regla básica es 1 CC + animaciones aparte (como describiste al comienzo, el método 1 es como se suele utilizar). El temblequeo se puede estar dando por no usar Move y modificar transforms directamente, no lo se. Saludos.
  17. Ya que está yo la calculo así: Vector3 dir = ( target.position - transform.position ).normalized ; @Stunx Si querés usar dos puntos (principio y fin) como en tu código original usa "Physics.LineCast"
  18. Buenísimo, buena info. Ah perdon, inputEditor es un Editor, al igual que los editores que tenés en los inspectores, vos podés definir un Editor ( inputEditor ) y dibujarlo manualmente ( inputEditor.OnInspectorGUI() ). En mi código está definido así: Editor inputEditor = null; En mi ejemplo tengo un editor por cada tipo de SCO, pero vos podés asignar todo a uno mismo, probablemente vas a tener que redibujarlo cada vez.
  19. Gracias, exacto está pensado para arrancar un proyecto, organizarlo y por lo menos visualizar el paso de un elemento a otro, algo que muchas veces se deja para el final. El asset está pensado para cubrir lo básico. El dissolve va en la 1.1, la opción de un dissolve con shader (siguiendo el alpha junto con los colores de la curva del gradiente). Lo que decís del audio está muy bien también, tenía pensado meter más opciones para el tema del Audio, en 1.0 es muy básico, pero de a poco voy a ir introduciendo diversas opciones, como mantener el clip, ignorar algun FadeIn/Out, etc. Saludos!
  20. Hola, les presento este nuevo asset, lo llamé Overseer (capataz): Asset Store | Guía (inglés) ■ Descripción Overseer es un simple e útil herramienta de manejo de escenas (Scene Manager). Este asset permite crear y organizar facilmente la estructura principal de tu juego, se encarga de lo básico, como carga de escenas, transiciones (fade in/out), pantallas de carga, audio, pantallas introductorias y creditos. Overseer usa el concepto de elementos, cada uno consiste en: Tag. Cursor settings. Scenes. Loading Canvas. Audio (loop, volume and clip). Duration (fixed or not , duration). FadeIn/Out (enable/disable, duration and gradient curve). ■ Para quién es? Para cualquiera, no se requiere saber de programación, con solo arrastrar componentes y asignar referencias alcanza, todas las características están integradas en una sola ventana. ■ Características Principales Editor haz todo en una sola ventana. Escenas Agrega a un elemento la cantidad de escenas que quieras (multiples escenas son cargadas de manera Aditiva). Selecciona la escena activa que tu quieras. Listas reordenables reordena rapidamente los elementos de tu juego. Opciones del cursor por elemento Fade In/Out Usa y configura fade in/out de tipo individual (por elemento, override) o global (común para todos los elementos). Duración Puedes asignar una dada duración al elemento, esto es útil para crear "splash screens" (típica pantalla introductoria). Audio Selecciona un clip de audio y reproducelo, el volumen se verá afectado por el "alpha" del fade In/Out. Canvas de "Loading Screen" Usa to propio canvas UI para crear la pantalla de carga. Overseer soporta Animation (componente Legacy, de 0 a track length), fillAmount (componente Image) y texto (Por ej "Loading 68%") con formato personalizable. Créditos Importa tu archivo txt (con la información de los créditos) y conviértelo en un texto de Unity (componente Text). ■ Imágenes/Videos: Escenas de la Demo (muy simplona): Si quieren hacer preguntas háganlas (sea de soporte o dudas). Saludos
  21. Iba a decir lo mismo, @mrpacogp en el trailer no puede haber lag, sino ya estás promocionando que va a andar mal, por más que sea un muy buen juego. Tenés versión para PC/Desktop "a mano"? Me refiero a algun link directo de alguna web, es que por la store de Microsoft me da problemas, no tengo idea por qué, me dice que hubo un error una y otra vez.
  22. Andate al inspector, poné arriba modo Debug, al lado del candado. Dale play y revisá todas las variables, si todo pasa muy rápido andate a ProjectSettings/Time y reducí la escala temporal. Del código, si tenés varios ifs sospechá que algo va por mal camino (a la larga va a ir seguro), lo mejor es manejarte por estados si podés o tratar de crearte una clase a parte (C#) que te organice todo un poco. Por ej (no digo que ande, es una pequeña modificación) con esto podés configurar cada timer, chequear si llegan a la cuenta y resetearlos: https://hatebin.com/qnmglgfcrk Las 4 bools las cambié por un int, ya que siemrpe tenés uno en true y el resto el false. Yo también pensé en eso, pero como ambos floats se representan igual la comparación debería ser correcta (si es que antes impone que sea = -0.01f) ... y ya que está pregunto, @Quaternion por qué el "-0.01f" ?? hace de reset?
  23. Hola @Kalu01 en mi opinión: "Health" debería ser la parte numérica, un componentes cuyos campos son invisibles, con los valores definitivos, ya sea health, max, min, etc. Acá no tiene que haber ninguna referencia a ningun componente UI. En tu caso estás llamando a HealthUI.DisplayHealth(health) esto está "mal" desde el punto de vista este. "HealthUI" debería tener una referencia al componente "Health" y pedir los campos requeridos para la UI, sea health, max, min, etc ... haciendo esto evitás tener valores no actualizados, siempre que la barra esté actualizandose va a representar los valores correctos todo el tiempo.
  24. Hola @xeleh, muy buena herramienta, tiene linda pinta. Te pregunto: ¿Todas las acciones se agregan desde el inspector o tenés además algun editor aparte? ¿El componente de GameFlow es un monobehavioursolamente o además se pueden crear assets individuales (scriptableObjects)? ¿Existe alguna comparativa en rendimiento de hacer un behaviour con GameFlow vs C#? ... Por supuesto nadie espera que ninguna heramienta de este tipo sea comparable con puro C# (en velocidad), pero por lo menos para tener alguna idea. Saludos
×
×
  • Create New...