El rincón de Unity

Nucklear

Vengo a compartir esto por aquí que lo encontré por los foros de Unity y parece interesante. http://www.mixamo.com/

Es un SW que sirve para animar el PJ que hayáis creado, tiene auto-rigging o podéis importar un modelo con esqueleto ya puesto y crear las animaciones facilmente. Cuando acabe mi alien voy a testearlo y comento mis impresiones.

1 respuesta
N1Tr0s

Creeis que usar Unity para crear juegos 2D en Android es lo más apropiado?
Si no es asi, que me sugeris?

1 respuesta
Nucklear

#32 Poder puedes hacerlo, pero tiene sus complicaciones porque Unity está pensado para juegos 3D. Para desarrollar un juego 2D para android tienes GameMaker: Studio que tiene funcionalidades para exportar para Android. Puedes comprarlo desde Steam o bajarte la Demo para echarle un vistazo.

kraneok

#31 Luego te cobran un pastizal por sacar el keko ya animado y rigeado xD, gl.

1 respuesta
Nucklear

#34 Puedes aplicarle unas animaciones gratuitas que tienen o sacarlo solamente riggeado sin pagar.

1 respuesta
kraneok

#35 Yo intenté sacarlo y no podía, pero claro eso hace ya 2 años así, quizás lo han cambiado, de todos modos, mixamo es una herramienta bastante buena para gente que no tienen animadores ni nada.

PD: Busco gente para hacer un juegillo en 2D, a ver si alguien se anima homeeee ya :D

1 respuesta
Postmortem

#36 Qué necesitas exactly?

#38 suerte entonces xD aquí otro programador con poca noción de gráficos o sonido

1 respuesta
kraneok

#37 No sé tio, la verdad que llevo ya mucho tiempo queriendo hacer algún juegecillo aceptable.
Yo puedo aportar programación, haría falta pues personas que se dedicasen al tema de los diseños, animaciones, etc, todo lo gráfico vaya.

2 respuestas
Nucklear

#38 Si buscas spriters y tal pasante por el hilo de pixelart. Yo podría ayudarte pero estoy a mil últimamente y me voy a centrar en 2 proyectos que me van a llevar lo suyo.

1
Nucklear

Buenas gente ya que este hilo está parado vengo a poner unas cuantas dudas porque he llegado a un punto donde estoy atascado y no se por donde tirar.

Estoy programando un controlador para un sidescroller, este es el código para controlar al personaje:

var speed : float = 6.0;
var jumpSpeed : float = 8.0;
var gravity : float = 20.0;


private var moveDirection : Vector3 = Vector3.zero;


function FixedUpdate() {
	var controller : CharacterController = GetComponent(CharacterController);
	
if (controller.isGrounded) {
    
    moveDirection = Vector3(0, 0, Input.GetAxis("Horizontal"));
    moveDirection = transform.TransformDirection(moveDirection);
    moveDirection *= speed;
     
    if (Input.GetKey("up")) {
        moveDirection.y = jumpSpeed;
    }

}

moveDirection.y -= gravity * Time.deltaTime;

controller.Move(moveDirection * Time.deltaTime);
}

El problema que tengo es a la hora de aplicar las animaciones, ahora mismo el personaje lo que hace es moverse en el eje Z (Izda y Dcha) y saltar, pero cuando se mueve hacia la derecha (El PJ está por defecto mirando a la izquierda) no se rota.

He probado a hacer algo así como:

if(moveDirection.z < 0){
transform.Rotate(0,180,0);
}

Pero lo que pasa es que me gira todo el eje por lo que se invierten los controles.

Las dudas son, ¿Como se suele rotar el personaje independientemente de los controles? y ¿Como se suelen aplicar las animaciones? He visto que hay funciones específicas para hacerlo pero no me aclaro, así que si alguien tuviese una guía sería de ayuda.

2 respuestas
Postmortem

#40 Yo para el 2D trabajo bajo un framework llamado Orthello2D, desde ahí puedes configurar tus sprites, tus animaciones, tiene su propio código y métodos para llamar y a raíz de ahí puedes pedir que se invierta horizontalmente o verticalmente [o ambas] programar tus animaciones y tu spritesheet cómodamente, etc

te dejo el tutorial para hacer un juego completo bajo esa herramienta y te dejo también solo el framework por si no te quieres meter en fregaos aunque puede que haya una manera de hacerlo directamente en unity... tocando el material o algo pero ya no lo se.

Dejo aquí mi duda, tengo un pacman en 2D que actualmente he programado yo su movimiento y como se puede mover a base de raycast manuales [si detecta un collider, no le deja moverse] el problema es que hay que hacer varios raycast para que tenga en cuenta el cubo completo y no una parte

a alguien se le ocurre un controlador o algo para que detecte la colisión completa del cubo con el otro? el problema es que tiene que detectar en que parte del cubo ha colisionado y demás... o algún controlador, lo que quiero es algo tipo 3D y punto, si hay un collider, no puedes pasar sobre el y fin

1 1 respuesta
Nucklear

#41 Gracias, pero ese ya lo he visto, lo que estoy haciendo es un sidescroller 3D por lo que eso no me sirve.

Xxee

#40 viendo tu código, prueba a quitar el transform.TransformDirection(moveDirection); Esa función lo que hace es pasar de local a world, y tu necesitas que el vector dirección esté en local siempre.

Prueba y dime si te funciona, y si eso intento explicarte un poco mejor de que hablo si no lo entiendes.

1 respuesta
Nucklear

#43 Pues va a ser eso, me estaba complicando la vida para nada. Gracias.

¿Ahora con la otra duda sobre las animaciones alguien me podría ayudar?

1 respuesta
Selbryn

#44 Que tipo de animaciones tienes? Tienes alguna hecha?, pj riggeado y skineado? que necesitas?

1 respuesta
Nucklear

#45 Estoy usando el BaseMale que hay gratuito en la Asset Store como modelo para prototipar el CharacterController para el sidescroller.

En principio solo necesitaría correr, andar, agacharse y saltar. Aunque puede que implemente mas esas sería las principales. Son animaciones simples por lo que no necesito animaciones de union para giros ni nada ya que solo se mueve en el eje Y y Z.

Ademas del hecho de activar las animaciones acordes a lo que haga el jugador tengo un pequeño problema con el salto.

En la animación de salto el modelo antes se agacha para coger impulso y luego salta pero tal y como lo tenía montado antes de usar el script que tengo ahora lo que hacía era empezar a subir directamente mientras se reproducía la animación. ¿Como se controla eso? Mi idea era poner un delay mientras se pulsa el boton para que cuadre pero me parece una solución cutre.

He visto que normalmente se hace un script para el control de personaje y otro para gestión de animaciones dividiendolas en capas, etc...Si alguien me supiese explicar un poco por donde van los tiros sería bienvenido.

Gracias.

1 respuesta
Selbryn

#46 Yo te puedo explicar mas o menos lo que se , pero ahora mismo estoy hasta arriba de trabajos como para hacer un tuto...

Si quieres este domingo que estoy mas libre o lunes hago uno bien y lo comparto.

1 respuesta
Nucklear

#47 Si te ves con ganas de hacerlo sería un gran aporte, pero si no tienes tiempo y conoces algún sitio donde se explique tambien me vale.

#47 He encontrado este tutorial para programar una IA donde también tratan el tema de scripting de animaciones: http://www.unityspain.com/index.php/foro/59-recursos/11714-adngel-s-ai-dummy-tutorial-de-script-avanzado

Me acalara bastante lo que tengo que hacer, de todas formas si te ves con ganas los tutoriales siempre son de agradecer.

B

¿Alguien ha intentado alguna vez hacerse un Character Controller propio, basado en un Rigidbody?

El tema es que estoy teniendo unos problemas con colisiones extrañas entre dos box colliders (he probado también con Capsule y Sphere collider, pero sucede lo mismo), y es que el collider se mete unos centímetros sobre el otro collider, es muy raro, no lo entiendo, pero de esta forma se queda como "encasquillado" y no aumenta la velocidad, me he puesto a printear la velocidad del rigidbody y se queda entre 0.2 y 0.4, es muy frustrante.

Una imagen vale más que nada, así que:

Y el script de movimiento:

using UnityEngine;
using System.Collections;

public class PlayerMovement : MonoBehaviour {
    public float normalSpeed;
    public float maxSpeed;
    public float jumpForce;

public bool isOnGround;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
    print(rigidbody.velocity.magnitude);
    if (rigidbody.velocity.magnitude > maxSpeed)
    {
        rigidbody.velocity = rigidbody.velocity.normalized * maxSpeed;
    }
    if (Input.GetKey("left"))
    {
        rigidbody.AddForce(-normalSpeed, 0, 0);
    }
    else if (Input.GetKey("right"))
    {
        rigidbody.AddForce(normalSpeed, 0, 0);
    }
    if (Input.GetKeyDown("up"))
    {
        if (isOnGround == true)
        {
            rigidbody.AddForce(new Vector3(0, jumpForce, 0), ForceMode.Impulse);
            isOnGround = false;
        }
    }

}

void OnCollisionEnter(Collision collision)
{
    if (collision.collider.tag == "ground")
    {
        isOnGround = true;
    }
}
}

¿Alguna idea de qué es lo que está pasando? ¿Y cómo lo fixeo?

3 respuestas
Amazon

#49 nuestro character controller para la ld26 era propio, si no recuerdo mal, pero son dependencias de cmo7

Nucklear

#49 No entiendo que es lo que te pasa, tu personaje tiene asignado un rigidbody con la gravedad activada y tu problema es que cuando le das a play y la gravedad hace efecto el collider del personaje se mete dentro del otro un poco y lo traba?

1 respuesta
B

#51 Exacto.

1 respuesta
Nucklear

#52 ¿Lo de arriba es un plano? Si es un plano tu problema puede ser que por el grosor no se detecte bien la colisión.

Si estás haciendo un juego 2D en lugar de usar un plano para el sprite utiliza un cubo y utiliza la camara ortogonal para que no se vea la profundidad del cubo.

1 respuesta
B

#53 El tema es que el Plano no tiene colisión, el plano es únicamente para el sprite y las animaciones, tengo un script puesto en ese plano que hace que cambie su posición a la del Player Hitbox, que lo llamo yo, que tiene el renderizado deshabilitado y por eso no aparece, pero lo he seleccionado previamente para que se vea el cubo colisionador medio-dentro del otro.

PD: No puedo hacer lo del cubo que has dicho por que el juego va a ser 2.5D, personajes como Sprites y entorno en un 3D básico.

storm2211

#49 ponle un physics material a tu rigidbody con 0 bounciness. (lo siento es que no me sale la palabra en castellano)

DaRk-eXe

tengo un problemilla... os comento:

he instalado el Unity, Maya, 3dmax.. importo el primer tutorial de unity.. Proyect #1 Stealth noseque..

y al importarlo me da el siguiente error:

Unable to open Assets/xxxxx.fbx: Check external application preferences

Siendo xxxxx, un archivo del proyecto y claro.. no se me ve nada.. ¿soluciones?

1 respuesta
Nucklear

#56 Para abrir FBX necesitas un importer, si maya o 3DMax no lo traen por defecto instalaselo y si no Blender lo trae por defecto.

1 respuesta
DaRk-eXe

#57 Gracias, he instalado el FBX Converter y puedo ver la animación en el Inspector, pero me sigue dando el mismo warning :\

1 respuesta
Nucklear

#58 Eso creo que es porque Unity tiene algunos importers predefinidos, miralo en la web oficial. O si no configurarlo en las preferencias.

1 respuesta
DaRk-eXe

#59 Todo arreglado, gracias :)

Y otra duda así en general.. el tema de texturas y demas, ¿las hay free? ¿o tengo que hacermelas todas yo? Porque si quiero usar hierba o terreno asi tipico random, supongo que habra material free para cosas triviales no?

1 respuesta
Tema cerrado