님하여 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
컨트롤을 만든 다음 프리 팹으로 저장하십시오. 원본을 삭제하십시오. 그런 다음 Instantiate
Toggle
컨트롤 조립식을 런타임 및 위치에 배치하거나 필요할 경우 크기를 조정할 수 있습니다.조각에 의해
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 ->전환 예를 들어
,이 토글 모습입니다 같은 :
1 .Create 전환 게임 오브젝트 그때 그것의 자식이된다 캔버스.
2 .Create는 배경 게임 오브젝트는 그것을 전환 게임 오브젝트의 자녀합니다.
3 .Create은 체크 마크 게임 오브젝트는 그것을 배경 게임 오브젝트의 자녀합니다.
4 .Create는 라벨 게임 오브젝트는 그것을 전환 게임 오브젝트의 자녀합니다. 이 편집기에 나타납니다처럼
5 부탁해 각 게임 오브젝트에 Image
, Text
및 Toggle
같은 구성 요소를 연결합니다. 코드에서
:
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이 경우에는 괜찮을 것입니다.
이것은 훌륭합니다. 그러나 Unity API에는 여전히 기본 기능이 빠져 있습니다. 그것은 기본 배경 이미지, 버튼 이미지 등을 사용하지 않을 것입니다 (이는 정의상,해야 할 일입니다). 그러나이 속임수는 당신을 위해 그것을 지나갈 것입니다 : https://forum.unity3d.com/threads/how-to-apply-uisprite-image-to-button-and-keep-borders-via-script.386434/#post -2514534 – Adam
예. 그것은 그것으로 한 무승부입니다. 유니티가 그것을 고쳐 주길 바래요. 그 링크를 가져 주셔서 감사합니다. – Programmer