megaPRO 8 Report post Posted July 21 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. Gracias de antemano. Xus Share this post Link to post Share on other sites
iRobb 638 Report post Posted July 22 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
Pistaxo21 10 Report post Posted July 22 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
pioj 800 Report post Posted July 22 Creo que también pide explícitamente las directivas #IFDEFINE, para poder elegir él cuando quiera compilar para una plataforma u otra... https://docs.unity3d.com/2018.1/Documentation/Manual/PlatformDependentCompilation.html Share this post Link to post Share on other sites
megaPRO 8 Report post Posted July 22 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
iRobb 638 Report post Posted July 22 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
megaPRO 8 Report post Posted July 24 (edited) 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 July 24 by megaPRO añado errores Share this post Link to post Share on other sites