Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

342
Vistas
Hacer referencia usando & y desreferenciar usando * en Unity

Esta es una pregunta de referencia de variable C en Unity y no una pregunta de referencia de gameobject.

Necesito obtener la dirección de newVar , como en &newVar . ¿Es esto posible en Unity? He intentado varias búsquedas y no puedo encontrar una respuesta.

Hay documentación sobre cómo hacer esto en C pero necesito hacerlo en Unity.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Nunca he usado Archimatix, pero mirando el manual que veo en línea, parece que funcionará. En C#, las lambdas capturan variables por referencia, por lo que puede hacer que los parámetros lean el resultado de una lambda para obtener una variable actualizada.

 public class ParamUpdater: MonoBehaviour { [SerializeField] AXModel model; List<AXParameter> params; List<Func<float>> paramGetters; // Use this for initialization void Awake () { // Establish refernces to AXModel parameters. Params = new List<AXParameter>(); if (model != null) { Params.Add(model.getParameter("Engine.Param0")); Params.Add(model.getParameter("Engine.Param1")); // add more params here } paramGetters = new List<Func<float>>(); // create default getters for (int i = 0 ; i < Params.Count ; i++) { paramGetters.Add(()=>0f); } } public void ConfigureParamGetter(int index, Func<float> getter) { paramGetters[index] = getter; } public void Recalculate() { for(int i = 0 ; i < Params.Count ; i++) { float curVal = paramGetters[i](); // Maybe a different method would be better? // online API is very lacking... Params[i].initiatePARAMETER_Ripple_setFloatValueFromGUIChange(curVal); } model.autobuild(); recalculate(); } }

Y luego, por ejemplo, en una clase donde vive un flotante de interés, llame a ConfigureParamGetter con un Func que devuelve la variable. Como se mencionó anteriormente, la captura se realiza por referencia, por lo que siempre estará actualizada cuando se llame en ParamUpdater .

 public class ImportantClass: MonoBehaviour { [SerializeField] ParamUpdater paramUpdater; float importantFloat; // Use Start to call after ParamUpdater initializes in Awake void Start() { paramUpdater.ConfigureParamGetter(0, ()=>importantFloat); } // for example void Update() { importantFloat = Time.time; } // called whenever void DoRecalculate() { paramUpdater.Recalculate(); } }

Avíseme si cometí algún error de sintaxis o cualquier otro problema, puedo intentar solucionarlo.

over 4 years ago · Santiago Trujillo Denunciar

0

Necesita punteros y la palabra clave del código inseguro .

Las clases en C# ya son referencias, por lo que no sirve de mucho convertirlas en punteros. Es decir, un GameObject ya es un tipo de referencia y ya funciona como un puntero.

Para otras cosas, como los tipos no administrados , puede usar códigos y punteros no seguros.

Entonces puedes hacer cosas como char* pc = &c;

También recuerde "Permitir código inseguro" con Archivo > Configuración de compilación... => Haga clic en Configuración del reproductor => Configuración de código => Permitir código 'inseguro' .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda