Unity Créer un contrôle d’interface utilisateur à partir d’un script

J’ai créé une bascule par code mais elle ne sera pas affichée. De plus, je ne peux pas changer la position de mon champ de texte. J’ai essayé beaucoup et rien ne fonctionne. Ceci est ma version actuelle, peut-être que vous voyez l’erreur.

Je suis nouveau sur Unity et c’est très difficile.

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(); 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(); myToggle.isOn = true; myToggle.transform.position = new Vector3(10, 10, 0); } } 

Vous êtes censé faire Toggle l’enfant du Canvas . Vous ne l’avez pas fait dans votre code. En outre, vous déplacez un composant d’interface utilisateur et GameObject avec newGO.GetComponent().anchoredPosition3D newGO.transform.position non newGO.transform.position .

Il existe 3 façons de créer un contrôle d’interface utilisateur complet dans Unity:

1.Utilisez l’API DefaultControls pour le générer (facile et recommandé)

Avec la classe DefaultControls , Unity créera l’interface utilisateur fournie, puis renverra le parent de l’interface utilisateur. C’est le moyen le plus simple et recommandé de le faire. Il DefaultControls.Resources tant que paramètre afin de pouvoir fournir les images-objects à utiliser lors de la création du contrôle d’interface utilisateur par défaut.

Bouton:

 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); } 

Basculer:

 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); } 

Curseur:

 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); } 

Panneau:

 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); } 

Champ de saisie:

 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().font = (Font)Resources.GetBuiltinResource(typeof(Font), "Arial.ttf"); } 

Menu déroulant:

 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); } 

Le rest des contrôles de l’interface utilisateur:

 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 préfabriqué et instancié

Cette méthode nécessite que l’interface utilisateur soit déjà créée et enregistrée en tant que préfabriqué. Vous pouvez ensuite Instantiate l’interface utilisateur en cas de besoin.

Créez un contrôle Toggle partir de l’éditeur puis enregistrez-le en tant que préfabriqué. Supprimer l’original. Vous pouvez ensuite Instantiate le préfabriqué Toggle Control pendant l’exécution et le positionner ou le redimensionner si nécessaire.

 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().anchoredPosition3D = new Vector3(...,...,...); //Re-scale? uiToggle.GetComponent().localScale = new Vector3(...,...,...); } 

2. pièce par pièce (dur)

Pour ce faire, vous devez d’abord créer une interface utilisateur à partir de l’éditeur, puis étudier la hiérarchie et les composants qui lui sont associés dans l’éditeur et les reproduire via du code.

GameObject -> UI -> Basculer

Par exemple, voici à quoi ressemble Toggle:

entrez la description de l'image ici

1.Créez un object à bascule puis faites-en un enfant du canevas .

2. Créez un GameObject en arrière- plan, puis créez-le comme enfant du Toggle GameObject.

3. Créez un Checkmark GameObject puis faites-en un enfant du Background GameObject.

4. Créez une étiquette GameObject puis rendez-la enfant de Toggle GameObject.

5 .Maintenant, attachez des composants tels que Image , Text et Toggle à chaque object de jeu tel qu’il apparaît dans l’éditeur.

Dans du code:

 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(); 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(); txtRect.anchorMin = new Vector2(0, 0); txtRect.anchorMax = new Vector2(1, 1); //txtRect.y //Attach Image Component to the Checkmark Image chmkImage = chmk.AddComponent(); 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(); bgImage.sprite = (Sprite)AssetDatabase.GetBuiltinExtraResource(typeof(Sprite), "UI/Skin/UISprite.psd"); bgImage.type = Image.Type.Sliced; RectTransform bgRect = txt.GetComponent(); bgRect.anchorMin = new Vector2(0, 1); bgRect.anchorMax = new Vector2(0, 1); //Attach Toggle Component to the Toggle Toggle toggleComponent = toggle.AddComponent(); toggleComponent.transition = Selectable.Transition.ColorTint; toggleComponent.targetGraphic = bgImage; toggleComponent.isOn = true; toggleComponent.toggleTransition = Toggle.ToggleTransition.Fade; toggleComponent.graphic = chmkImage; toggle.GetComponent().anchoredPosition3D = new Vector3(0, 0, 0); } 

La méthode n ° 3 est le moyen le plus difficile de le faire, vous devriez donc l’éviter. Méthode n ° 1 devrait être bien dans ce cas.