我只是想问一下在Unity上创建和显示视图的正确方法是什么。我刚才是这方面的初学者,刚刚观看了关于如何编写脚本并学习如何动态创建GUI的教程,其中包括按钮,编辑文本框和其他视图,但不确定我应该如何真正实现它的方式呢经过优化,不会影响应用程序性能。我到目前为止尝试的是创建一个editText,我将其设置在MainCamera上进行显示,这是我可以重复使用的,这样如果我需要在应用程序上添加更多editText,我可以拖放脚本。这是迄今为止的代码:
using UnityEngine;
using System.Collections;
public class EditText : MonoBehaviour {
public int width = 150;
public int height = 25;
public int x_position = 0;
public int y_position = 0;
public string text = "Hello World";
public Position position = Position.unset;
public int text_size = 15;
public enum Position{unset,center_screen, center_vertical, center_horizontal};
void OnGUI () {
setPosition ();
GUI.skin.textArea.fontSize = text_size;
GUI.color = Color.red;
}
private void setPosition(){
switch (position) {
case Position.center_screen:
GUI.TextArea (new Rect (Screen.width/2 - width/2, Screen.height/2 - height/2, width, height), text);
GUI.backgroundColor = Color.white;
break;
case Position.center_vertical:
GUI.TextArea (new Rect (x_position, Screen.height/2 - height/2, width, height), text);
GUI.backgroundColor = Color.white;
break;
case Position.center_horizontal:
GUI.TextArea (new Rect (Screen.width/2 - width/2, y_position, width, height), text);
GUI.backgroundColor = Color.white;
break;
default:
GUI.TextArea (new Rect (x_position, y_position, width, height), text);
GUI.backgroundColor = Color.white;
break;
}
}
}
问题是我这样做是对,还是应该停止使用其他实施?因为我真的希望它像Android Views一样可重用。此外,如果有任何其他库或脚本我可以用来实现这一点,以便我不为此重新发明轮子?
在旁注上我也搜索了NGUI,虽然我不确定这是否符合我的需要。因为当我尝试创建UILabel时,组件只有很少的选项,我不确定如何使用它。
答案 0 :(得分:0)
问题:我这样做是对,还是应该停止使用其他实施?
这取决于。您的实施很简单但有效。如果您需要更多精美的UI,可以考虑:
根据Unity official blog,新的GUI系统非常接近,它将包含在Unity 4.6中,这也将是Unity 4周期中的最后一次重大更新"。
我更喜欢最后一个,Unity 4.6或Unity 5 ,因为它是免费的Unity官方,支持和社区是您的重要资产!
对于您当前的实施,我认为您可以做得更好,而不使用:
GUI.TextArea (new Rect (...)); // Not the best way
而是尝试使用:
GUILayout.BeginHorizontal ();
{
GUILayout.FlexibleSpace ();
//label etc., this guarantees centered in your UI and resolution independent.
GUILayout.XXX (...);
GUILayout.FlexibleSpace ();
}
GUILayout.EndHorizontal ();
有趣的链接:
答案 1 :(得分:0)
Unity的GUI系统远非完美,但它正在逐步改进。这是一个很好的解决方案,只需很少的简单元素。使用Unity的GUI系统时,我通常会单独设置每个菜单或“显示”。我从未在Unity系统中以模块化方式设计UI元素。我没有遇到过设置元素的'Rect'而不能满足我的操作需求的情况。我不能说Unity的GUI系统的性能,除了我从未注意到它的影响。
NGUI,就像Unity一样,是模块化的。要创建所需的ui元素,可能需要将各种脚本拼凑在一起。例如,输入字段需要UILabel,UIInput脚本和BoxCollider。使用NGUI中包含的所有脚本,我已经能够创建一些非常令人印象深刻的界面预制件。能够在场景视图中直观地构建我的界面也很有帮助。
这些是我使用的两个UI系统,并且已经找到了两者的用途。