2017-03-06 134 views
2

嗨,大家好,我对Unity3D完全陌生。我正在尝试创建一个可滚动按钮列表,用户可以在面板中滚动按钮列表。所以我有一个OnGUI函数,并在其中创建了一些宽度和高度相同的按钮。它们的Y轴位置相隔大约55个单位。这一切都是在Unity的C#脚本中完成的。我将脚本附加到面板上,并且该面板还附带有一个垂直滚动条。我在面板中添加了Mask组件,并取消选中了Show Mask Graphic。但是当我点击播放时,按钮根本不显示。是否有可能在脚本内创建一个滚动条并附加到按钮列表?由于在Unity中从C#脚本创建可滚动按钮列表菜单

+1

我劝你加你试过什么,所以人们有东西与人开始工作之前一些代码因为你基本上问“我可以做X?”,因此下雨了。答案是99.9%肯定“是”。 – Maakep

+1

我很困惑,为什么这篇文章有3个upvotes没有显示你的代码。我有一种感觉,因为你提到过'OnGUI'和[Mask](https:/ /),所以你正在混合/使用[IMGUI](https://docs.unity3d.com/Manual/GUIScriptingGuide.html) /docs.unity3d.com/ScriptReference/UI.Mask.html)组件。这将**不**的工作。没有你的代码很难准确地告诉你你在做什么。 – Programmer

+0

void OnGUI(){GUI。按钮(新Rect(470,175,245,45),“Sample Button”)}。所以在这个函数里面我继续增加更多的按钮,增加约40个单位的PosY。在Unity场景中,我没有选中掩模图形 – Techbeginner

回答

1

试试这个代码:
(从Unity脚本引用采取GUI.BeginScrollView

using UnityEngine; 
using System.Collections; 

public class ExampleClass : MonoBehaviour { 
    public Vector2 scrollPosition = Vector2.zero; 
    void OnGUI() { 
     scrollPosition = GUI.BeginScrollView(new Rect(10, 300, 100, 100), scrollPosition, new Rect(0, 0, 220, 200)); 
     GUI.Button(new Rect(0, 0, 100, 20), "Top-left"); 
     GUI.Button(new Rect(120, 0, 100, 20), "Top-right"); 
     GUI.Button(new Rect(0, 180, 100, 20), "Bottom-left"); 
     GUI.Button(new Rect(120, 180, 100, 20), "Bottom-right"); 
     GUI.EndScrollView(); 
    } 
} 
+1

这个答案在3年前可能有效。 OnGUI只能用于编辑器UI。 – Everts

+0

我不这么认为。 IMGUI有其自身的优势,对于一些人来说,它更容易理解和使用。新的图形用户界面有自己的怪癖和问题,并且有时可能会令人难以置信。 – lilotop

+0

@lilotop有趣。 [IMGUI](https://docs.unity3d.com/Manual/GUIScriptingGuide.html)主要用作编辑器中程序员的工具。在新UI出现之前,人们使用NGUI而不是IMGUI。只有爱好者使用IMGUI。发布游戏的人使用NGUI或其他UI插件。 – Programmer

2

好吧,我会强烈建议您使用新的统一UI系统,而不是使用立即模式GUI(OnGui函数) 。您仍然可以轻松地以编程方式控制事物,但使用画布可以更轻松地进行操作。

您提到使用面板和遮罩,但它们不会与OnGui设置混合使用,即传统UI系统,只能用于Unity编辑器插件。

也就是说有涵盖正是你在统一站点这三个教程需要什么很好的学习资源:

如果你没有任何使用新系统的经验,主要教程页面是here

我希望有帮助。

1

如果在游戏中,我不推荐OnGUI,而是使用Unity UI组件。有关于如何在这里创建Scrolalble列表的好视频: https://www.youtube.com/watch?v=lUun2xW6FJ4

您可以轻松地从编辑器或代码向垂直或水平组添加按钮。你只是实例化按钮预制件并将它们放置在水平组合父项中。

GameObject horLayoutGroup; 
GameObject buttonPrefab; 
var myButton = Instantiate(buttonPrefab, new Vector3(default), Quaternion.identity); 
myButton.transform.SetParent(horLayoutGroup.transform) 

这将自动缩放整个布局组,并将所有东西整齐地放在一起,而不必使用像素偏移。

如果你想将函数添加到一个按钮,可以使用下面的代码:

myButton = GetComponent<Button>(); 
myButton.onClick.RemoveAllListeners(); 
myButton.onClick.AddListener(() => SomeClassInstance.PublicFunction); 
myButton.onClick.AddListener(() => SomeOtherClassInstance.AnotherPublicFunction); 
相关问题