Jump to content

Search the Community

Showing results for tags 'character controller'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • General
    • Proyectos
    • Offtopic
    • Unity Feeds
    • Website
    • Youtube
  • Mesa de ayuda
    • Unity
    • Arte
    • Builds & Dispositivos
    • Otras Especialidades
  • Aportes de la Comunidad
    • Recursos
    • Eventos
  • Bolsa de trabajo & Colaboraciones
    • Ofertas y Demandas
  • Post Antiguos
    • General (Antiguo)

Blogs

There are no results to display.

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Especialidad

Found 7 results

  1. Hola a todos. Tengo un personaje el cual necesito que se mueva en base a la cámara (es decir que se vire de frente en la dirección que se pulse en el cursor), por ahora lo tengo hecho pero lo muevo usando el Transform.Translate, cuando este tiene un Character Controller. No he logrado moverlo haciendo uso del Character Controller, por lo menos cuando pulso el cursor de abajo no funciona. Si alguien lo ha hecho, o sabe como lograr este resultado, o conoce algún video bueno sobre el tema; por favor háganmelo llegar, gracias.
  2. Hola de nuevo, nuevamente me surgió un problema XD. A la script que puse anteriormente en otro post le modifiqué un par de cosas, y lo que le agregué es simplemente una nueva void(llamada "Ataque") a la cual mediante un evento en la animación de un enemigo, llamo y hago que le reste vida al jugador(siempre y cuando esté "dentro del rango"), los problemas que me surgieron fueron 2: 1) El enemigo(al cual muevo con la variable "SimpleMove" del character controller) no se mueve, y antes de crear la void si lo hacía, bah mejor dicho se "mueve" o lo intenta pero hay como una fuerza que lo tira para atras. 2)La vida de mi jugador no se reduce(por más que esté dentro del rango especificado). Lo que más me sorprende es que lo había hecho antes en una script la cual sin querer borré y me andaba todo perfecto(por lo que temo que esté haciendo algo mal o salteandome un paso). Les dejo la script: using UnityEngine; using System.Collections; [RequireComponent(typeof(CharacterController))] public class ControladorEnemigo : MonoBehaviour { public Animator ani; public CharacterController Char; public Transform Player; public float MinCercania, MaxCercania, velocidad, dano; public bool Perseguir; // Use this for initialization void Start () { Char = GetComponent<CharacterController>(); ani = GetComponent<Animator>(); Perseguir = false; Invoke("TiempoAttack", ); } // Update is called once per frame void Update () { float Distancia = Vector3.Distance(transform.position, Player.position); if(Distancia < MaxCercania){ Perseguir = true; }else{ Perseguir = false; } Vector3 rot = new Vector3(Player.position.x, transform.position.y, Player.position.z); Vector3 forward = transform.TransformDirection(Vector3.forward); if(Perseguir){ transform.LookAt(rot); ani.SetBool("Detectado", true); ani.SetBool("AtaqueBase", false); Char.SimpleMove(forward * velocidad * Time.deltaTime); }else{ ani.SetBool("Detectado", false); } if(Distancia <= MinCercania){ Perseguir = false; ani.SetBool("AtaqueBase", true); } } void TiempoAttack () { SaludyMana.Salud -= dano; RaycastHit hit; if(Physics.Raycast(transform.position, transform.forward, out hit, 2)){ if(ani.GetCurrentAnimatorStateInfo().IsName("AtaqueBase")){ //Si se estareproduciendo la animacion "AtaqueBase" if (hit.collider.tag == "Player"){ //y el ray colisiona con el Player SaludyMana.Salud -= dano; //se le quite X cantidad de vida } } } }
  3. Hola a todos! La duda que traigo el día de hoy XD es una basada en la script que utilizo para mover a mi enemigo, lo hago mediante el uso del character controller. La cosa es que (fuera del tema) no se si es debido a la animación que interfiere con el character o con el capsule collider que le puse a mi enemigo que cuando le doy a Play, este reproduce todo perfecto pero se "teletransporta" un par de centímetros(o la unidad con que se maneje Unity : p) hacia arriba en el eje Y. Por lo que para solucionarlo, le puse un rigidbody(va ya lo tenía) y le "congelé" el movimiento en el eje Y con Contrains, y me funcionó bien el tema es que mi mapa tiene caminos con subidas y bajadas y al subir una colina o algo alto el enemigo lo hace bien pero al tener que "bajar" este se sigue moviendo por la altura que alcanzó en la colina(debido a lo del Contrains). Mi duda es como evitar el problema de la "teletransportación" para no tener que usar el freeze position en el eje Y, y así poder evitar este problema de las alturas. Acá les dejo la script que estoy haciendo: using UnityEngine; using System.Collections; [RequireComponent(typeof(Rigidbody))] [RequireComponent(typeof(CapsuleCollider))] [RequireComponent(typeof(CharacterController))] public class ControladorEnemigo : MonoBehaviour { public Animator ani; public CharacterController Char; public Rigidbody RB; public float gravity; public Transform Jugador; public float MinCercania, MaxCercania, velocidad, Dano; public bool Perseguir = false; // Use this for initialization void Start () { ani = GetComponent<Animator>(); Char = GetComponent<CharacterController>(); RB = GetComponent<Rigidbody>(); } // Update is called once per frame void Update () { float Distancia = Vector3.Distance(transform.position, Jack.position); if(Distancia < MaxCercania && Distancia > MinCercania){ Perseguir = true; }else{ if(Distancia <= MinCercania){ Perseguir = false; ani.SetBool("Detectado", false); ani.Play("AtaqueBase"); } } Vector3 rotacion = new Vector3(Jugador.position.x, transform.position.y, Jugador.position.z); if(Perseguir){ transform.LookAt(rotacion); ani.SetBool("Detectado", true); Char.Move(transform.forward * velocidad * Time.deltaTime); } if(Distancia <= MinCercania){ Perseguir = false; ani.SetBool("Detectado", false); ani.Play("AtaqueBase"); } } } Entre otras cosas también leí en la scripting reference de Unity, que el uso del character controller "anula" las físicas del gameobject que lo lleve por lo que también me surgieron dudas para usarlo como forma de movimiento(si alguien me puede explicar eso o darme otro método lo agradecería muchísimo). Y la última cosa con la que estoy luchando, es con un error que me sucede cuando mi enemigo persigue a mi Player(esto lo hace bien), el problema es que cuando está cerca(donde se reproduce la animación de ataque) este como que no se detiene y atraviesa al jugador y no se le despega de encima, pero en la script aclaré que cuando estuviera lo suficientemente cerca, reproduciera la animación de ataque,lo cual sí hace, y que se detenga(volviendo la variable "Perseguir" igual a false) pero no lo hace. Si me ayudan con estas dudas se los agradecería muchooo jajaja Gracias de antemano.
  4. Hola Unityspain. Necesito ayuda con el movimiento de un personaje 2d estilo meat boy, es decir, esa velocidad frenética, saltar apoyándose en las paredes, control difícil del personaje. Más o menos lo he logrado, pero no lo termino de perfeccionar. Lo que tengo ahora es un personaje muy muy muy muy difícil de controlar y hasta tedioso. El salto en la pared está bastante bien, pero si salto solo en el suelo, el personaje demora una eternidad en llegar al punto más alto del salto, y en consecuencia si salto corriendo el personaje prácticamente vuela, algo que no va con el diseño de los niveles. Adjunto el script y una foto del escenario en que lo estoy probando. Por favor ayúdenme, si desean probarlo solo coloquen el script a un cubo con un rigidbody y restringiendo todas las rotaciones. Gracias \_(..)_/ PixelControl.cs using UnityEngine; using System.Collections; public class PixelControl : MonoBehaviour { public bool isGrounded; public bool isWall; public bool habilitado = true; public float MaxVelocidad = 25; public float velocidadPorDefecto; public float velocidadPorAire; //public float Aceleration = 30; public float velocidadSalto = 8; public float velocidadSaltoPared = 1; Rigidbody rb; // Use this for initialization void Start () { Physics.gravity = new Vector3(, -15F, ); velocidadPorAire = MaxVelocidad - 5; velocidadPorDefecto = MaxVelocidad; rb = gameObject.GetComponent<Rigidbody>(); } void FixedUpdate(){ print (rb.velocity.x); if (rb.velocity.x >= MaxVelocidad) { rb.velocity = new Vector3 (MaxVelocidad, rb.velocity.y, ); } else if (rb.velocity.x <= -MaxVelocidad) { rb.velocity = new Vector3(-MaxVelocidad,rb.velocity.y,); } } // Update is called once per frame void Update () { menorVelocidadEnElAire (); checkIsGrounded (); checkIsWall (); checkHbilitarControles (); Move (); //print (); } public void Move(){ if(habilitado){ float horizontal = Input.GetAxis ("Horizontal"); if (horizontal < -0.1f) { /*if (rb.velocity.x > - MaxVelocidad) { rb.AddForce (new Vector3 (-Aceleration, 0, 0)); } else { rb.AddForce (new Vector3 (-MaxVelocidad,rb.velocity.y,0)); }*/ rb.AddForce(new Vector3(-MaxVelocidad,rb.velocity.y,)/*,ForceMode.Acceleration*/); } else if(horizontal > 0.1f){ /*if (rb.velocity.x < MaxVelocidad) { rb.AddForce (new Vector3 (Aceleration, 0, 0)); } else { rb.AddForce (new Vector3 (MaxVelocidad,rb.velocity.y,0)); }*/ rb.AddForce(new Vector3(MaxVelocidad,rb.velocity.y,)/*,ForceMode.Acceleration*/); } } //////salto//// float horizontal2 = Input.GetAxis ("Horizontal"); if (Input.GetButtonDown("Jump") && isGrounded /*&& !isWall*/){ rb.velocity = new Vector3(rb.velocity.x, velocidadSalto, ); //Salto desde pared// }else if(Input.GetButtonDown("Jump") && isWall && horizontal2 != ){ rb.velocity = new Vector3 (velocidadSalto * (horizontal2*(-velocidadSaltoPared)), velocidadSalto, ); } } //Chequea que el player este en el suelo// public void checkIsGrounded() { Vector3 down = transform.TransformDirection(Vector3.down); if (Physics.Raycast (transform.position, down, transform.localScale.y/2 + 0.01f)) { isGrounded = true; } else { isGrounded = false; } } //Quita velocidad si esta en el aire// public void menorVelocidadEnElAire(){ if (!isGrounded) { MaxVelocidad = velocidadPorAire; } else { MaxVelocidad = velocidadPorDefecto; } } //no permite que el player se quede pegado a una pared si presiona el cursor// public void checkHbilitarControles(){ if(!isGrounded && isWall){ habilitado = false; }else if((!isGrounded && !isWall) || isGrounded){ habilitado = true; } } //Chequea que el personaje choque con una pared// public void checkIsWall() { Vector3 der = transform.TransformDirection(Vector3.right); Vector3 izq = transform.TransformDirection(Vector3.left); if (Physics.Raycast (transform.position, der, transform.localScale.x/2 + 0.01f) || Physics.Raycast (transform.position, izq, transform.localScale.x/2 + 0.01f)) { isWall = true; } else { isWall = false; } } }
  5. Hola que tal gente, primero les explico un poco mi problema; estoy desarrollando un juego para moviles con una jugabilidad algo parecida a TempleRun, el problema que tengo es que cuando llego a una esquina y girar este de un brinco ya esta viendo hacia donde gire, lo que yo quisiera hacer es que cuando gire se vea mas smooth, o sea que no gire de golpe y se vea al personaje girando un poco. El personaje usa un Character controller, seria que deba cambiar a rigidbody? Aqui esta mi script en la parte del giro: Estuve investigando y hay unas cosas que se llaman quaternion segun con esto puedo resolver el problema, pero yo no se nada de quaternion, Si alguien me explicara la sintaxis de como usar los quaterniones, o igualmente si alguien tiene una manera diferente de hacer el script estaria muy agradecido que me lo hagan saber. Un saludo a todos!
  6. Buenas, llevo una semana volviéndome loco con esto, el problema que tengo es que estoy haciendo un FPS y cuando disparo al enemigo tengo el problema de que se me queda muerto en el aire. El enemigo en cuestion, es un modelo de la asset store, en concreto este: https://www.assetstore.unity3d.com/en/#!/content/44560 El modelo soporta Mecanim, esta correctamente rigeado, funcionan todas las animaciones, etc. Lo utilizo en el juego como un preFab y lo instancio dinamicamente para que aparezcan los zombies desde un spawner, El enemigo tiene un Character Controller, un RigidBody kinematico y un mesh collider para que las colisiones sean exactas con su malla. El disparo lo estoy haciendo con un objeto bala, que es un prefab y se genera dinámicamente al disparar, cuando esta está en movimiento lanza un Raycast y comprueba mediante el tag si colisiona con un zombie, si se hace esta colisión antes de que el proyectil se destruya, este se mueve a la posición del RaycastHit, por lo que en la bala se ejecuta el OnCollisonEnter desde donde instancio un salpicon de sangre en su posición, destruyo el proyectil y lanzo un método en el enemigo que se encarga de quitar vida, comprobar si muere, etc. Este sistema me funciona a la perfección, en el método que quita vida al enemigo, le resto la vida correspondiente y si se ha llevado a cabo un cierto numero de disparos le mato, haciendo un efecto con partículas y la animación de muerte. El problema lo tengo aquí, la animación esta configurada en el correspondiente animator con su transición y tal, pero cuando lo animo el zombie se queda en el aire. Creo que el problema puede estar en el Character Controller, que al tener forma de cápsula, se queda "en pie", he intentado desactivarlo antes de hacer la animacion, pero parece que o no funciona o no es tan facil, mirando, leyendo y preguntando por ahi, perece ser que la forma correcta es: - Desactivar el script de control del enemigo que gestiona sus movimientos. - Descativar el Character Controller. - Poner el RigidBody como NO kinematico (ya está asi). - Activar un nuevo Collider (Ya tiene un MeshCollider activo). Pero ya os imagináis que nada de nada, sobre esta fórmula he hecho todas las variantes que se me han ocurrido y de hecho he conseguido de todo, que salga volando, que patine y mil cosas mas, menos que se caiga al suelo. Os adjunto dos fotos, una de como se queda en el aire y otra del editor de Unity con el modelo seleccionado, el "ataud" que arrastra es el mesh collider que me lo representa asi, me imagino que porque esta el Charactyer Controller que tambien es un collider, pero el caso es que funciona perfectamente todo menos lo de la altura. ¿Alguien me puede dar alguna idea al respecto? Gracias a todos por anticipado. Un saludo, Fernando.
  7. Wenas, el esquema de control es el que véis en el video de abajo. Como véis el robot simplemente se orienta hacia el puntero del ratón, pero esta rotación es independiente del movimiento. Ahora quiero substituir el robot por una animación bipedestrada , que necesito que muestre la animación de andar hacia adelante o hacia atrás dependiendo de la orientación y el movimiento. Vamos, que si el cursor está a la derecha y pulsamos "D", camine hacia adelante pero si el cursor está a la izquierda y pulsamos la misma tecla, entonces la animación que ejecutará será la de caminar hacia atrás. Programo con playmaker, o sea que con el pseudocódigo es suficiente...yo había pensado en calcular el ángulo entre el vector de la rotación en world space del personaje, y el vector de movimiento. Si es 0º (no exactamente, si no dentro de un rango) caminará hacia adelante...si es 90 o -90 hará un strafe, y si es 180 será hacia atrás...(creo que Vector.Angle sólo devuelve valores entre 0 y 180 positivos o negativos). Me hago un lío con los vectores y la madre que los parió xD, no sé qué manera es más facil de calcularlo, si quaterniones o angulos de euler UU' En fin, de programación poco, pero cuando entramos en temas de geometría, menos xD Pero no se porqué, creo que algo se me escapa y que seguramente haya alguna manera más fácil de hacerlo...¿tenéis alguna idea?
UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...