Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

slide/barrido para el personaje

Iniciado por Goex, Junio 03, 2015, 01:32:03 AM

Tema anterior - Siguiente tema
Buenas, actualmente sigo en mi proyecto de un shooter estilo contra , mi pj actualmente puede apuntar en 8 direcciones, y saltar sin problemas , tambien agacharse (aqui ya configure que el collider sea menor obviamente) , y tengo la animacion del barrido, la cual ya le asigne un boton , y la realiza sin problemas (tmb ajuste el collider)       ahora...
 
el problema 
 
durante el barrido puedo mover el personaje , o sea, izq o derecha, cuando en realidad yo quiero que al barrer avanze en la direccion que esta mirando cierta distancia, sin poder volverlo hacia atras (estilo de barrido que tenia sunsetriders y metal slug 5 ) he intentado con transform position ,translate pero no, ademas que no se como asignarle por ej a un transform que dure cierta cantidad de segundos nomas (soy noob , si )
 
alguna idea de como lograr el barrido para el personaje?? para que al tocar el boton se mueva esa distancia sin poder hacer otra cosa?
 
aqui dejo mi script de movimiento del personaje por las dudas (boton E es para agarcharse, FIRE 2 es el del barrido)
 
pragma strict
 
var walkSpeed : float = 1.80;
var jumpSpeed : float = 8.0;
var gravity : float = 20.0;
var slideSpeed : float = 2;
var controller : CharacterController = GetComponent.<CharacterController>();
var applyRootMotion: boolean = true;
 
private var moveDirection : Vector3 = Vector3.zero ;
 
function Start () {
 
}
function Update() {
 
 
 
 
if (controller.isGrounded) {
 
moveDirection =  Vector3(Input.GetAxis ("Horizontal") , 0, 
                                                   Input.GetAxis("Vertical"));
 
 
                    
 
moveDirection *= walkSpeed;
 
 
 
 
if (Input.GetKey (KeyCode.Space)) {
moveDirection.y = jumpSpeed;
}
 
if (Input.GetKey (KeyCode.E)) {
walkSpeed = 0;
controller.height = 1;
controller.center = Vector3 (0, 0.5, 0);
controller.radius = 0.21; }
else {
walkSpeed = 1.80;
controller.height = 1.85;
controller.center = Vector3 (0, 1, 0);
controller.radius = 0.21;
}
 
if (Input.GetButton ("Fire2")) {
controller.height = 1;
controller.center = Vector3 (0, 0.5, 0);
 
}
 
 
 
}
 
 
moveDirection.y -= gravity * Time.deltaTime;
 
 
controller.Move(moveDirection * Time.deltaTime);
 
 
}
 
 
 
 
 
 
 

Junio 03, 2015, 10:37:01 AM #1 Ultima modificación: Junio 03, 2015, 10:43:03 AM por kaito
Cita de: Goex date=1433287923... cuando en realidad yo quiero que al barrer avanze en la direccion que esta mirando cierta distancia, sin poder volverlo hacia atras (estilo de barrido que tenia sunsetriders y metal slug 5 ) he 
 
 
direccion que esta mirando = transform.forward.
 
sin poder volverlo hacia atras = Mathf.Clam(Input.GetAxis("Vertical"),0f,1f) * velocidad
 
Con esto, en mi opinión, estaría resuelto el problema.
 
Y la rotación la tendrías que calcular en otro vector diferente. Aunque no hace falta si utilizas directamente transform.Rotate(0f,Input.GetAxis("Horizontal")*velocidadRotacion*Time.deltaTime,0f)

Por lo que veo en tu código te recomiendo aprendas a utilizar mejor métodos, te sera mas sencillo programar las cosas.
 
Por otro lado lo de Kaito esta perfecto, desmenuza tu problema y observa que quieres lograr. Si tu idea es que el barrido del personaje sea con físicas, entonces deberás tomar la velocidad del personaje al momento del barrido, luego a esta velocidad darle un poco mas un 5% del total, esto generaría la sensación de salto, y por ultimo, si necesitas que sea controlado, entonces, controlas la velocidad actual del persona y esta al ser menor que X velocidad el personaje para el deslizamiento. 
 
Hay muchas formas de hacerlo, pero en el mundo de los vídeo juegos, las cosas siempre son diferentes, es por eso que cuando se pide ayuda se trata de dar el mayor detalle posible.
 
Un abrazo.

Junio 04, 2015, 08:37:30 AM #3 Ultima modificación: Junio 04, 2015, 09:37:28 AM por Goex
muchisimas gracias a ambos  , si , en cuanto al codigo soy novato (lo habran notado a la legua  )  
 
o yo soy demasiado malo o algo no salio como debia  , el input deberia quedarme
 
if (Input.GetButton ("Fire2")) {
transform.Rotate(0f,Input.GetAxis("Horizontal")*velocidadRotacion*Time.deltaTime,0f)
}
realmente no paso nada de nada :s
 
y el otro que probe fue 
if (Input.GetButton ("Fire2")) {
transform.forward = Mathf.Clam(Input.GetAxis("Vertical"),0f,1f) * slideSpeed
}
 
y este es el error que me tira 

Assets/player/mecanim test/movetests.js(52,66): BCE0022: Cannot convert 'float' to 'UnityEngine.Vector3'.
 
 
hoy la verdad estuve a full logrando disparar (lo cual me ha quedado bien) , lei esto hace 20 minutos y probe eso, pero se ve que algo hize mal o no hize 
agradezco sus respuestas, tratare de leer sobre mathf , a ver si encuentro como poder solucionarlo    , ahora estoy cansado (4:30 am aca) , me voy a dormir je
 
saludos

Etiquetas: