Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: ftejada en Julio 29, 2015, 02:34:52 AM

Título: Manejar Input Manager desde Script
Publicado por: ftejada en Julio 29, 2015, 02:34:52 AM
Hola chicos!!!¿De qué manera puedo acceder al InputManager desde un script para crear nuevos botones de input??? Es decir..... lo mismo que se puede hacer desde el inspector pero desde un Script... Saludos y gracias por adelantado.
Título: Manejar Input Manager desde Script
Publicado por: pioj en Julio 29, 2015, 10:35:13 AM
Actualmente no se puede añadir ni quitar funcionalidad (es una feature propuesta en el Roadmap), pero sí que puedes acceder al manager para verificar y gestionar inputs.
http://www.plyoung.com/blog/mani***ting-input-manager-in-script.html (http://www.plyoung.com/blog/mani***ting-input-manager-in-script.html)
Título: Manejar Input Manager desde Script
Publicado por: ftejada en Julio 29, 2015, 12:21:07 PM
Esto era lo que andaba buscando....creo!!!! jajaja. Voy a verlo a fondo gracias por la ayuda
Título: Manejar Input Manager desde Script
Publicado por: ftejada en Enero 22, 2016, 11:23:52 PM
[quote author=pioj date=1438158913" data-ipsquote="" data-cite="pioj" class="ipsQuote">Actualmente no se puede añadir ni quitar funcionalidad (es una feature propuesta en el Roadmap), pero sí que puedes acceder al manager para verificar y gestionar inputs.
Título: Manejar Input Manager desde Script
Publicado por: kaito en Enero 23, 2016, 09:44:44 PM
using UnityEngine;
using System.Collections;

public class Axis : MonoBehaviour {

public Axe customAxe;

public float value;

// Use this for initialization
void Start () {

   StartCoroutine(this.customAxe.Update());

}

// Update is called once per frame
void Update () {

   this.value = this.customAxe.Value;

}
}

[System.Serializable]
public class Axe{

public KeyCode NegativeButton;
public KeyCode PositiveButton;
public KeyCode AltNegativeButton;
public KeyCode AltPositiveButton;
public float Range = 1f;
public float smoothTimeUp = 1f;
public float smoothTimeDown = 1f;
public float Dead = 0.001f;
public float Value{ get; private set; }
private float velocity = 0f;

public IEnumerator Update(){

   while(Application.isPlaying){

      if(Input.GetKey(this.NegativeButton) || Input.GetKey(this.AltNegativeButton)){

         this.Value = Mathf.SmoothDamp(this.Value,-this.Range,ref this.velocity, this.smoothTimeUp);
         if(this.Value+this.Range < this.Dead) this.Value = -this.Range;

      } else if(Input.GetKey(this.PositiveButton) || Input.GetKey(this.AltPositiveButton)){

         this.Value = Mathf.SmoothDamp(this.Value,this.Range,ref this.velocity,this.smoothTimeUp);
         if(this.Range-this.Value < this.Dead) this.Value = this.Range;

      } else {

         this.Value = Mathf.SmoothDamp(this.Value,0f,ref this.velocity,this.smoothTimeDown);
         if(Mathf.Abs(this.Value) < this.Dead) this.Value = 0f;

      }

      yield return 0;

   }

}

}
 He creado una clase similar a la que utilizar Unity en el InputManager.En lugar de Sensitivity y Gravity, utilizo smoothTimeUp y smoothTimeDown para el incremento y disminucion de valor.También he incluido una variable Range, para establecer el intervalo y que no sea siempre uno.La variable Dead es el margen o distancia minima a los valores -Range, 0, Range.La clase se actualiza desde una corrutine, y para acceder a su valor consultamos la propiedad Value.
Título: Manejar Input Manager desde Script
Publicado por: ftejada en Enero 24, 2016, 09:54:34 AM
[quote author=kaito date=1453581884" data-ipsquote="" data-cite="kaito" class="ipsQuote">
using UnityEngine;using System.Collections;

public class Axis : MonoBehaviour {

public Axe customAxe;

public float value;

// Use this for initialization
void Start () {

   StartCoroutine(this.customAxe.Update());

}

// Update is called once per frame
void Update () {

   this.value = this.customAxe.Value;

}
}

[System.Serializable]
public class Axe{

public KeyCode NegativeButton;
public KeyCode PositiveButton;
public KeyCode AltNegativeButton;
public KeyCode AltPositiveButton;
public float Range = 1f;
public float smoothTimeUp = 1f;
public float smoothTimeDown = 1f;
public float Dead = 0.001f;
public float Value{ get; private set; }
private float velocity = 0f;

public IEnumerator Update(){

   while(Application.isPlaying){

      if(Input.GetKey(this.NegativeButton) || Input.GetKey(this.AltNegativeButton)){

         this.Value = Mathf.SmoothDamp(this.Value,-this.Range,ref this.velocity, this.smoothTimeUp);
         if(this.Value+this.Range < this.Dead) this.Value = -this.Range;

      } else if(Input.GetKey(this.PositiveButton) || Input.GetKey(this.AltPositiveButton)){

         this.Value = Mathf.SmoothDamp(this.Value,this.Range,ref this.velocity,this.smoothTimeUp);
         if(this.Range-this.Value < this.Dead) this.Value = this.Range;

      } else {

         this.Value = Mathf.SmoothDamp(this.Value,0f,ref this.velocity,this.smoothTimeDown);
         if(Mathf.Abs(this.Value) < this.Dead) this.Value = 0f;

      }

      yield return 0;

   }

}

}
 He creado una clase similar a la que utilizar Unity en el InputManager.En lugar de Sensitivity y Gravity, utilizo smoothTimeUp y smoothTimeDown para el incremento y disminucion de valor.También he incluido una variable Range, para establecer el intervalo y que no sea siempre uno.La variable Dead es el margen o distancia minima a los valores -Range, 0, Range.La clase se actualiza desde una corrutine, y para acceder a su valor consultamos la propiedad Value.[/quote]De nuevo muchas gracias por la ayuda!!! Hay algunas cosas que no entiendo o no se.... ¿Porqué haces la variable ...
public Axe customAxe;
... publica?¿Las dos clases las creas dentro del mismo script??? y me imagino que dicho script va adjunto al player? Pero aun así no veo de donde obtienes los valores que suelta el InputManager de Unity...Veras! veo que las variables ...
public KeyCode NegativeButton;
public KeyCode PositiveButton;
public KeyCode AltNegativeButton;
public KeyCode AltPositiveButton;
son las que te lo proporcionan de algun modo, ¿pero como toman estas variables los datos... no deberia haber por algun sitio una cosa como esta?:PositiveButton = InputManager.Horizontal;     //o algo así??? jajaja perdona mi ignorancia! pero estoy algo liado...Veo que haces el Input.GetKey(this.PositiveButton) y demas.... pero PositiveButton, NegativeButton, etc, son variables que tu has creado y no se porque reciben actualizacion del Input....Podrías explicarmelo porfa?De nuevo, muchas gracias maquina!!! Saludos
Título: Manejar Input Manager desde Script
Publicado por: kaito en Enero 26, 2016, 09:01:02 PM
¿Has probado el script, de verdad? O solo lo has leido.Axe es una clase serializada para poder ser modificada/definida desde el inspector de Unity.Es decir, que al crear customAxe como pública y serializada, aparece en el inspector para poder modificar sus valores.Por eso te pregunto si lo has probado. Porque si lo hubieras probado habrías visto la clase en el Inspector.Y utilizo Input.GetKey para comprobar si se ha pulsado en cada frame los botones asignados. Por eso se encuentra en una corrutina.
Título: Manejar Input Manager desde Script
Publicado por: ACarranza en Enero 26, 2016, 10:27:01 PM
a ver yo creo que te estas complicando mucho,cual es la razon por la cual quieres modificar el inputManager?como en todo siempre hay mas de 1 solucion a un problema, entonces hay que encontrarlos  
Título: Manejar Input Manager desde Script
Publicado por: ftejada en Enero 27, 2016, 05:27:53 AM
Cita de: kaito date=1453838462" data-ipsquote="" data-cite="kaito" class="ipsQuote¿Has probado el script, de verdad? O solo lo has leido.Axe es una clase serializada para poder ser modificada/definida desde el inspector de Unity.Es decir, que al crear customAxe como pública y serializada, aparece en el inspector para poder modificar sus valores.Por eso te pregunto si lo has probado. Porque si lo hubieras probado habrías visto la clase en el Inspector.Y utilizo Input.GetKey para comprobar si se ha pulsado en cada frame los botones asignados. Por eso se encuentra en una corrutina.
Gracias por contestar de nuevo kaito. No he podido probarlo aun, solo lo he leido ya que, como te comenté en otro mensaje que me contestastes el otro día ( el de la pregunta del temblor de la camara), estoy fuera y llego mañana por la tarde noche. Hasta entonces no puedo probar ni esto ni lo del temblor de la camara que me dijiste... Por esto solo he podido leerlo sin probar nada, por lo que me surgieron las dudas que te expuse. Pero la verdad es que con la explicación que me has dado en este ultimo mensaje, creo que empiezo a comprender... de todos modos el Jueves comentaré algo a ver como me ha ido... De nuevo muchas gracias! un saludo.
[quote author=ACarranza date=1453843621" data-ipsquote="" data-cite="ACarranza" class="ipsQuote">a ver yo creo que te estas complicando mucho,cual es la razon por la cual quieres modificar el inputManager?como en todo siempre hay mas de 1 solucion a un problema, entonces hay que encontrarlos :) Título: Manejar Input Manager desde Script
Publicado por: ftejada en Enero 28, 2016, 07:11:02 PM
Hola que tal!!Kaito he estado probando el script del input que me dejastes arriba pero ¿No se pueden asignar las palancas analogicas al input? He estado mirando y solo viene para asignarles Buttons al gamepad pero no las palancas....Es que si no puedo utilizar las palancas analogicas con este script, desgraciadamente no me sirve....  ¿O se me está pasando algo?? Saludos
Título: Manejar Input Manager desde Script
Publicado por: ftejada en Abril 04, 2016, 05:05:44 PM
Hola a todos gente!Vuelvo a sacar este tema a la luz para aportar una solucion provisional mientras a los chicos de Unity, les da por dejarnos acceder a toda la interface que nos sale en el inspector del InputManager....La verdad es que he dejado aparcado bastante tiempo este asunto porque no se me ocurria nada para poder solucionar el problema que planteé y también porque he estado liado con otras cosas. Pero la solución era bastante sencilla y no se como no me di cuenta antes.El tema es que Unity nos proporciona una interface grafica desde el inspector para el InputManager... todos lo sabemos a estas alturas.//Obtenemos el input de las palancas analogicas
            float despInputEjeLocal_X_Global = Input.GetAxis("AnalogicStickHorizontal");
            float despInputEjeLocal_Z_Global = Input.GetAxis("AnalogicStickVertical");

            //Para el control de la cruceta del mando si no se pulsó la palanca analogica
            if(despInputEjeLocal_X_Global == 0 && despInputEjeLocal_Z_Global == 0)
            {
                despInputEjeLocal_X_Global = Input.GetAxis("CrucetaHorizontal");
                despInputEjeLocal_Z_Global = Input.GetAxis("CrucetaVertical");
            }

            //Para el control por el teclado si no se pulsaron ni palanca ni cruceta
            if(despInputEjeLocal_X_Global == 0 && despInputEjeLocal_Z_Global == 0)
            {
                despInputEjeLocal_X_Global = Input.GetAxis("Horizontal");
                despInputEjeLocal_Z_Global = Input.GetAxis("Vertical");
            }Como mi juego se maneja con teclado o con gamepad, tengo en cuenta si se pulsó cualquiera de las opciones de input para mi InGame. Si alguien tiene alguna duda que me lo diga. Espero que le sirva a alguien. Saludos