Tengo dos guiones. Estoy usando un script para cambiar la variable bool de otro script. Lo que quiero en mi primer script es tener la cadena como variable booleana (para hacer referencia al booleano en el segundo script). ¿Cómo logro esto?
Quiero lograr esto porque estoy agregando el primer script a varios gameObjects y cada uno de estos GO tiene una funcionalidad para activar/desactivar ciertos valores del segundo script. Me gustaría proporcionar los nombres de cada bool en el Script 1 desde mi ventana de inspección.
public Script2 script2; public string nameOfBool; void Start () { script2.nameOfBool= true; //Is there a way to do this? }Guión 2
public bool Bool_1; public bool Bool_2; public bool Bool_3;Hacer referencia a una propiedad por su nombre no es trivial, le sugiero que cree lambdas para cada una al inicio:
public class Script1 { public Script2 script2; public Action<bool> UpdateBool1; public Action<bool> UpdateBool2; public Action<bool> UpdateBool3; void StartUp() { UpdateBool1 = (newValue) => script2.Bool_1 = newValue; UpdateBool2 = (newValue) => script2.Bool_2 = newValue; UpdateBool3 = (newValue) => script2.Bool_3 = newValue; } }Luego en tiempo de ejecución:
UpdateBool2(true); Si desea asociar cada uno con un nombre, guárdelos en Dictionary<string, Action<bool>> :
public class Script1 { public Script2 script2; public Dictionary<string, Action<bool>> BoolUpdaters; void StartUp() { BoolUpdaters = new Dictionary<string, Action<bool>> { {"first", (newValue) => script2.Bool_1 = newValue} {"second", (newValue) => script2.Bool_2 = newValue} {"third", (newValue) => script2.Bool_3 = newValue} } } }Ahora puede invocarlos en función de un valor de cadena:
string targetBool = "first"; BoolUpdaters[targetBool](true);Si desea generar la lista de actualizadores en función de sus nombres (conocidos de antemano), puede ahorrarse algo de tipeo generando el código con un simple script de PowerShell:
param([string[]]$BoolNames) $BoolNames.ForEach({ '{{"{0}", (newValue) => script2.{0} = newValue}}' -f $_ }) Guárdelo en un archivo .ps1 , inicie PowerShell y ejecute el comando path\to\file.ps1 -BoolNames Bool_1,Bool_2,Bool_3,...