c# - tag - Unity Crea control de UI desde el script
unity ui script (1)
Se supone que debes hacer el Toggle
al niño del Canvas
. No hiciste eso en tu código. Además, mueve un componente de UI y GameObject con newGO.GetComponent<RectTransform>().anchoredPosition3D
newGO.transform.position
no newGO.transform.position
.
Hay 3 formas de crear un control completo de UI en Unity:
1.Utilice la API DefaultControls
para generarla (Fácil y Recomendada)
Con la clase DefaultControls
, Unity creará la interfaz de usuario suministrada y luego devolverá el elemento primario de la interfaz de usuario. Esta es la forma más fácil y recomendada de hacer esto. Toma DefaultControls.Resources
como parámetro para que pueda proporcionar los sprites que se utilizarán al crear el Control de UI predeterminado.
Botón:
public GameObject canvas;
void Start()
{
DefaultControls.Resources uiResources = new DefaultControls.Resources();
//Set the Button Background Image someBgSprite;
uiResources.standard = someBgSprite;
GameObject uiButton = DefaultControls.CreateButton(uiResources);
uiButton.transform.SetParent(canvas.transform, false);
}
Palanca:
public GameObject canvas;
void Start()
{
DefaultControls.Resources uiResources = new DefaultControls.Resources();
//Set the Toggle Background Image someBgSprite;
uiResources.background = someBgSprite;
//Set the Toggle Checkmark Image someCheckmarkSprite;
uiResources.checkmark = someCheckmarkSprite;
GameObject uiToggle = DefaultControls.CreateToggle(uiResources);
uiToggle.transform.SetParent(canvas.transform, false);
}
Control deslizante:
public GameObject canvas;
void Start()
{
DefaultControls.Resources uiResources = new DefaultControls.Resources();
//Set the Slider Background Image someBgSprite;
uiResources.background = someBgSprite;
//Set the Slider Fill Image someFillSprite;
uiResources.standard = someFillSprite;
//Set the Slider Knob Image someKnobSprite;
uiResources.knob = someKnobSprite;
GameObject uiSlider = DefaultControls.CreateSlider(uiResources);
uiSlider.transform.SetParent(canvas.transform, false);
}
Panel:
public GameObject canvas;
void Start()
{
DefaultControls.Resources uiResources = new DefaultControls.Resources();
//Set the Panel Background Image someBgSprite;
uiResources.background = someBgSprite;
GameObject uiPanel = DefaultControls.CreatePanel(uiResources);
uiPanel.transform.SetParent(canvas.transform, false);
}
Campo de entrada:
public GameObject canvas;
void Start()
{
DefaultControls.Resources uiResources = new DefaultControls.Resources();
//Set the InputField Background Image someBgSprite;
uiResources.inputField = someBgSprite;
GameObject uiInputField = DefaultControls.CreateInputField(uiResources);
uiInputField.transform.SetParent(canvas.transform, false);
uiInputField.transform.GetChild(0).GetComponent<Text>().font = (Font)Resources.GetBuiltinResource(typeof(Font), "Arial.ttf");
}
Desplegable:
public GameObject canvas;
void Start()
{
DefaultControls.Resources uiResources = new DefaultControls.Resources();
//Set the Dropdown Background and Handle Image someBgSprite;
uiResources.standard = someBgSprite;
//Set the Dropdown Scrollbar Background Image someScrollbarSprite;
uiResources.background = someScrollbarSprite;
//Set the Dropdown Image someDropDownSprite;
uiResources.dropdown = someDropDownSprite;
//Set the Dropdown Image someCheckmarkSprite;
uiResources.checkmark = someCheckmarkSprite;
//Set the Dropdown Viewport Mask Image someMaskSprite;
uiResources.mask = someMaskSprite;
GameObject uiDropdown = DefaultControls.CreateDropdown(uiResources);
uiDropdown.transform.SetParent(canvas.transform, false);
}
El resto de los controles de UI:
public static GameObject CreateImage(Resources resources);
public static GameObject CreateRawImage(Resources resources);
public static GameObject CreateScrollbar(Resources resources);
public static GameObject CreateScrollView(Resources resources);
public static GameObject CreateText(Resources resources);
3.Via prefabricada e instancia
Este método requiere que tenga la interfaz de usuario ya creada y guardada como prefabricada. A continuación, puede crear una Instantiate
la interfaz de usuario cuando lo necesite.
Cree un control de Toggle
desde el editor y guárdelo como un prefabricado. Eliminar el original. A continuación, puede Instantiate
una Instantiate
del prefabricado de control de alternancia durante el tiempo de ejecución y posicionarlo o escalarlo si es necesario.
public GameObject canvas;
public GameObject togglePrefab;
void Start()
{
GameObject uiToggle = Instantiate(togglePrefab) as GameObject;
uiToggle.transform.SetParent(canvas.transform, false);
//Move to another position?
uiToggle.GetComponent<RectTransform>().anchoredPosition3D = new Vector3(...,...,...);
//Re-scale?
uiToggle.GetComponent<RectTransform>().localScale = new Vector3(...,...,...);
}
2. Pieza por Pieza (Duro)
Para ello, primero cree una IU desde el Editor, luego estudie la Jerarquía y los componentes adjuntos a ella en el Editor y reprodúzcala mediante el código.
GameObject -> UI -> Toggle
Por ejemplo, así es como se ve Toggle:
1. Crea un juego de acción Toggle y luego hazlo hijo del lienzo .
2. Crea un GameObject de fondo y conviértelo en hijo de Toggle GameObject.
3. Crea un GameObject de marca de verificación y hazlo secundario del GameObject de fondo .
4. Crea una etiqueta GameObject y conviértela en hija de Toggle GameObject.
5. Ahora adjunte componentes como Image
, Text
y Toggle
a cada GameObject como aparece en el Editor.
En codigo:
public GameObject canvas;
void Start()
{
makeToggle();
}
void makeToggle()
{
GameObject toggleObj = createToggleObj(canvas);
GameObject bgObj = createBackgroundObj(toggleObj);
GameObject checkMarkObj = createCheckmarkObj(bgObj);
GameObject labelObj = createLabelObj(toggleObj);
attachAllComponents(toggleObj, bgObj, checkMarkObj, labelObj);
}
//1.Create a *Toggle* GameObject then make it child of the *Canvas*.
GameObject createToggleObj(GameObject cnvs)
{
GameObject toggle = new GameObject("Toggle");
toggle.transform.SetParent(cnvs.transform);
toggle.layer = LayerMask.NameToLayer("UI");
return toggle;
}
//2.Create a Background GameObject then make it child of the Toggle GameObject.
GameObject createBackgroundObj(GameObject toggle)
{
GameObject bg = new GameObject("Background");
bg.transform.SetParent(toggle.transform);
bg.layer = LayerMask.NameToLayer("UI");
return bg;
}
//3.Create a Checkmark GameObject then make it child of the Background GameObject.
GameObject createCheckmarkObj(GameObject bg)
{
GameObject chmk = new GameObject("Checkmark");
chmk.transform.SetParent(bg.transform);
chmk.layer = LayerMask.NameToLayer("UI");
return chmk;
}
//4.Create a Label GameObject then make it child of the Toggle GameObject.
GameObject createLabelObj(GameObject toggle)
{
GameObject lbl = new GameObject("Label");
lbl.transform.SetParent(toggle.transform);
lbl.layer = LayerMask.NameToLayer("UI");
return lbl;
}
//5.Now attach components like Image, Text and Toggle to each GameObject like it appears in the Editor.
void attachAllComponents(GameObject toggle, GameObject bg, GameObject chmk, GameObject lbl)
{
//Attach Text to label
Text txt = lbl.AddComponent<Text>();
txt.text = "Toggle";
Font arialFont =
(Font)Resources.GetBuiltinResource(typeof(Font), "Arial.ttf");
txt.font = arialFont;
txt.lineSpacing = 1;
txt.color = new Color(50 / 255, 50 / 255, 50 / 255, 255 / 255);
RectTransform txtRect = txt.GetComponent<RectTransform>();
txtRect.anchorMin = new Vector2(0, 0);
txtRect.anchorMax = new Vector2(1, 1);
//txtRect.y
//Attach Image Component to the Checkmark
Image chmkImage = chmk.AddComponent<Image>();
chmkImage.sprite = (Sprite)AssetDatabase.GetBuiltinExtraResource(typeof(Sprite), "UI/Skin/Checkmark.psd");
chmkImage.type = Image.Type.Simple;
//Attach Image Component to the Background
Image bgImage = bg.AddComponent<Image>();
bgImage.sprite = (Sprite)AssetDatabase.GetBuiltinExtraResource(typeof(Sprite), "UI/Skin/UISprite.psd");
bgImage.type = Image.Type.Sliced;
RectTransform bgRect = txt.GetComponent<RectTransform>();
bgRect.anchorMin = new Vector2(0, 1);
bgRect.anchorMax = new Vector2(0, 1);
//Attach Toggle Component to the Toggle
Toggle toggleComponent = toggle.AddComponent<Toggle>();
toggleComponent.transition = Selectable.Transition.ColorTint;
toggleComponent.targetGraphic = bgImage;
toggleComponent.isOn = true;
toggleComponent.toggleTransition = Toggle.ToggleTransition.Fade;
toggleComponent.graphic = chmkImage;
toggle.GetComponent<RectTransform>().anchoredPosition3D = new Vector3(0, 0, 0);
}
El método n. ° 3 es la forma más difícil de hacerlo, así que debe evitarlo. Método n. ° 1 Debería estar bien en este caso.
Creé un alternar por código pero no se mostrará. Además, no puedo cambiar la posición de mi campo de texto. Lo intenté mucho y nada funciona. Esta es mi versión actual, quizás veas el error.
Soy nuevo en Unity y es muy difícil.
public class Game : MonoBehaviour
{
public GameObject canvas;
void Start ()
{
GameObject newGO = new GameObject("myTextGO");
newGO.transform.SetParent(this.transform);
newGO.transform.position = new Vector3(0, 0, 0);
Text myText = newGO.AddComponent<Text>();
myText.text = "Ta-dah!";
Font ArialFont =
(Font)Resources.GetBuiltinResource(typeof(Font),"Arial.ttf");
myText.font = ArialFont;
myText.material = ArialFont.material;
myText.color = Color.black;
myText.transform.position = new Vector3(0, 10, 0);
GameObject secGO = new GameObject("myGO");
secGO.transform.SetParent(this.transform);
Toggle myToggle = secGO.AddComponent<Toggle>();
myToggle.isOn = true;
myToggle.transform.position = new Vector3(10, 10, 0);
}
}