2016-12-17 1 views
3

코드로 토글을 만들었지 만 표시되지 않습니다. 또한 텍스트 필드의 위치를 ​​변경할 수 없습니다. 나는 많은 것을 시도하고 아무것도 작동하지 않는다. 이것은 나의 현재 버전입니다, 아마도 당신은 실수를 보았을 것입니다.유니티 스크립트에서 UI 컨트롤 만들기

나는 Unity가 처음이다. 매우 어렵다.

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

답변

6

님하여 Toggle에게 Canvas의 자식을하기로되어있다. 코드에서 그렇게하지 않았습니다. 또한 newGO.GetComponent<RectTransform>().anchoredPosition3D이 아닌 UI 구성 요소 및 GameObject를 newGO.transform.position으로 이동합니다.

3 가지 방법 유니티의 전체 UI 컨트롤 만들 수 있습니다 다음 DefaultControls API 1. 한

가 생성 (쉬운 및 권장)하는 DefaultControls 클래스와

을, 유니티는 것이다 제공된 UI를 만든 다음 UI의 부모를 반환합니다. 이렇게하는 것이 가장 쉽고 권장되는 방법입니다. 기본 UI 컨트롤을 만들 때 사용할 스프라이트를 제공 할 수 있도록 매개 변수로 DefaultControls.Resources이 필요합니다.

버튼 :

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

전환 :

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

슬라이더 :

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

창 L :

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

InputField :

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

드롭 다운 :

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

인터페이스 컨트롤의 나머지 :

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 조립식 및 인스턴스화

이 방법은 당신이 할 수있는 다음 Instantiate UI를 할 때 필요, 당신은 UI가 이미 생성하고 조립식으로 저장되어 있어야합니다.

편집기에서 Toggle 컨트롤을 만든 다음 프리 팹으로 저장하십시오. 원본을 삭제하십시오. 그런 다음 InstantiateToggle 컨트롤 조립식을 런타임 및 위치에 배치하거나 필요할 경우 크기를 조정할 수 있습니다.조각에 의해

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.Piece (하드)

먼저 다음 계층 구조와 편집기에 연결된 구성 요소를 연구하고 코드를 통해 재현 편집기에서 UI를 작성하여이를 수행합니다.

게임 오브젝트 ->UI ->전환 예를 들어

,이 토글 모습입니다 같은 :

enter image description here

1 .Create 전환 게임 오브젝트 그때 그것의 자식이된다 캔버스.

2 .Create는 배경 게임 오브젝트는 그것을 전환 게임 오브젝트의 자녀합니다.

3 .Create은 체크 마크 게임 오브젝트는 그것을 배경 게임 오브젝트의 자녀합니다.

4 .Create는 라벨 게임 오브젝트는 그것을 전환 게임 오브젝트의 자녀합니다. 이 편집기에 나타납니다처럼

5 부탁해 각 게임 오브젝트에 Image, TextToggle 같은 구성 요소를 연결합니다. 코드에서

:

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

방법 # 3 당신이 그것을 피해야한다, 그래서이 작업을 수행하는 가장 어려운 방법입니다. 방법 # 1이 경우에는 괜찮을 것입니다.

+1

이것은 훌륭합니다. 그러나 Unity API에는 여전히 기본 기능이 빠져 있습니다. 그것은 기본 배경 이미지, 버튼 이미지 등을 사용하지 않을 것입니다 (이는 정의상,해야 할 일입니다). 그러나이 속임수는 당신을 위해 그것을 지나갈 것입니다 : https://forum.unity3d.com/threads/how-to-apply-uisprite-image-to-button-and-keep-borders-via-script.386434/#post -2514534 – Adam

+0

예. 그것은 그것으로 한 무승부입니다. 유니티가 그것을 고쳐 주길 바래요. 그 링크를 가져 주셔서 감사합니다. – Programmer