Jump to content
UnitySpain
megaPRO

activar desactivar MOBILE_INPUT via script

Recommended Posts

Buenas,

A ver si me podeis aclarar una duda, quiero usar una variable booleama propia, para usarla en una clase, de forma que si es positiva , haga "lo que sea" en un script y si es negativa " haga otra cosa", en el mismo script. La idea es utilizarla como se usa con:

Quote

 

#IF !MOBILE_INPUT

loquesea

#end if

 

Es decir, como creo una variable que acceda desde cualquier script y que se use para discriminar el codigo? Igual es demasiado fácil y estoy obtuso, agradeceria cualquier ayuda, o sugerencia.

Habia pensado en usar una variable del sistema pero tampoco soy capaz de activar o desactivar, por ejemplo el MOBILE_INPUT desde script.

Unity_2019-07-22_01-34-23.png

 

Gracias de antemano.

Xus

Share this post


Link to post
Share on other sites

Los condicionantes de precompilación se ejecutan pues, antes de la compilación. Esto significa que están "por encima" del código y realmente forman parte del compilador, no de C#. Cualquier código que el compilador vea que no se utiliza, no lo incluirá (sobre todo en IL2CPP). Si quieres discriminar basándote en código y plataforma mira las funciones de la clase estática Application.

En general y por mi experiencia, creo que lo estás enfocando mal. Explica exactamente que quieres hacer.

Share this post


Link to post
Share on other sites

Si quieres una variable booleana que pueda cambiar su valor en tiempo de ejecución (mientras el juego está corriendo) pero que pueda ser accesible desde cualquier clase puedes declararla como una variable estática. Te creas una clase que se llame por ejemplo GlobalVariables y dentro de ella declaras un 

public static bool MobileInput = true;

por ejemplo. Desde cualquier otra clase podrás acceder a ella escribiendo:

GlobalVariables.MobileInput

Sin tener que instanciar la clase GlobalVariables, y podrás cambiar su valor en tiempo de ejecución.

Share this post


Link to post
Share on other sites

Primero, gracias a todos por las respuestas. Cada dia que aprendo algo, me doy cuenta de que me faltan un par de vidas más para saber todo lo que quiero, en fin...hahaha.

Yo, enfocando mal? hahaha, por supuesto. Siempre voy aprendiendo a palos... entre lo que creo que es y lo que verdaderamente es, normalmente hay UN MUNDO.

risitas....

Gracias por contestar  a todos, al turrón.  Explico mi objetivo, a ver si lo replanteais de otra forma y yo me hago entender.

 

Estoy creando un menu de inicio, de donde se puede escoger la App en VR y sin VR, eso ya lo tengo resuelto.

La cosa se me complica, mas que nada por ignorancia, por supuesto, cuando toco la clase que controla el FPS, en este caso el RigidBodyFirstPersonController.cs, pues, varia la forma de controlar al personaje al ser VR o no VR, el tema es que no puedo crear dos RigidBody, no? . la cosa la tengo así;

1. Para VR se controla el avance desde un Joystick Bluettoth, y el tipico puntero con la mirada.

2. Para cuando no hay VR, he colocado dos joysticks virtuales Touch, en la propia pantalla.

Igual me complico, pero al tener que haber solo un RigidBody, necesito que parte del codigo se ejecute y otra parte no, para mostrar una UI u otra y los controles.

Lo consigo, si manualmente hago activar o desactivar desde el menu el MOBILE_INPUT, antes de lanzar la build, pero ni idea de como hacerlo desde Script y no sé encontrar nada definitivo por internete que me lo resuelva.

Uso el para el codigo NO VR en el RigidBody:

Quote

 

#if !MOBILE_INPUT

bla bla bla

#endif

 

Miraré esas opciones que me dais. La cuestion es como le doy el valor de true y false a una variable si la defino como me comentais.

Saludos y mil gracias, esto de aprender a palos duele....hahahah

 

 

Share this post


Link to post
Share on other sites

Hola

Desconozco cuánto sabes de C#. Yo lo explico a ver.

Create dos gameobjects con una clase controlador de personaje específico para cada uno de los modos que además contienen cada una su rigidbody. Estas dos clases que deriven de una clase donde esté todo el código que compartan. Desde otra clase, que será la que sabe que modo VR vas a usar, que active uno u otro controlador de personaje con el #IF si quieres.

Share this post


Link to post
Share on other sites

Hola,

De primero otra vez gracias a todos. Entiendo, que las directivas que pueda definir no pueden cambiarse  en tiempo de ejecución, por lo que #define, no se puede aplicar tal como yo queria, osea que descarto esa opcion. Es decir que si la defino y hago la compilación funciona, pero debo cambiarla y compilar de nuevo, que es lo que hacia hasta ahora con MOBILE_INPUT y eso me lleva a hacer dos apps separadas que es lo que intento evitar. Gracias por las aclaraciones.

Lo que busco es que el codigo se ejecute o no, segun haya escogido una opción u otra, es decir por el valor de una booleana, ya me serviria, y donde tengo la dificultad es en acceder a ese valor, como comenta,  @Pistaxo21, eso lo habia probado anteriormente y no logré que me funcionara,  intento acceder desde los scripts de RigidbodyFirstPersonController.cs y desde el MouseLook.cs, que son los que debo modificar su codigo en Runtime y siempre obtengo error, este:

Assets\Standard Assets\Characters\FirstPersonCharacter\Scripts\RigidbodyFirstPersonController.cs(15,21): error CS0246: The type or namespace name 'VariablesXus' could not be found (are you missing a using directive or an assembly reference?)

o este,

Assets\Standard Assets\Characters\FirstPersonCharacter\Scripts\RigidbodyFirstPersonController.cs(51,20): error CS0103: The name 'VariablesXus' does not exist in the current context

 

E igual desde el MouseLook.cs, que deduzco que no se ven, y que aunque las ponga estaticas, o las ponga publicas y las enlace, no son accesibles. No se si me dejo algo o no se puede desde esos scripts. Si se puede y me arrojais algo de luz, intentaria ese camino, pero creo que ya se la respuesta.

La solución de @iRobb, y te contesto, experiencia como coder, algo más de un año, a palos, es decir, autodidacta 120%, por lo que me considero aprendiz novato, pues he ido aprendiendo segun iba necesitando, por lo que soy consciente que muchos conceptos, como las directivas, que entiendo que son de nivel 1, pues no las tengo del todo claras, ahora, quizas un poco más claras, sí.

El crear dos Gameobjects con su Rigidbody y su controlador, tambien lo habia intentado al principio,  pero aún no tenia claro que  podia duplicar la Clase RigidbodyFirstPersonController y  simplemente renombrarla a RigidbodyFirstPersonControlleB , modificando cada uno para los controles, y despues usarlos para activar el que necesitara, como bien apuntabas, y no seguí ese camino. Además creia que la clase MouseLook,  que tambien debo duplicar, no se podia hacer , cosas de mi cabeza, que os voy a contar, nací asi , hahaha. Quizás es por lo que, aunque vengo de la parte artistica, como modelador y animador, tengo que reconocer que los retos que se me plantean cada dia a nivel de codigo , són lo que más me gusta, aunque sea un negado, que soy el primero que lo reconoce.Bueno, después del tostón, voy a ver si lo resuelvo. Os comento por este hilo si lo he conseguido. 

 

Edited by megaPRO
añado errores

Share this post


Link to post
Share on other sites

×
×
  • Create New...