Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

329
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!