【问题标题】:Unity3d UI elements change positionUnity3d UI 元素改变位置
【发布时间】:2015-08-22 09:10:15
【问题描述】:

我在 Unity3d 中制作了一个简单的应用程序,当按下按钮时会生成六个随机不同的数字。生成的数字只是六个 UI 文本,它们是 Canvas 的子级。我的问题是这些文本会根据屏幕尺寸改变它们的位置:
Texts position in full screen mode.
Texts position in normal mode

这是我用过的脚本:

void OnGUI()
{
    float rx = Screen.width / 1080.0f;
    float ry = Screen.height / 1920.0f;
    GUI.matrix = Matrix4x4.TRS(new Vector3(0,0,0),Quaternion.identity,new Vector3(rx,ry,1));

    GUI.skin = GameSkin;

    if (GUI.Button (GenerateRect, "GENERATE"))
                    GenerateNumbers ();
}

private void GenerateNumbers()
{
    int n;
        for(int i = 1;i<=6;i++)
        {
            n = UnityEngine.Random.Range (1, 100);
            while(nr.Contains(n))  /this while loop ensure that the numbers are different
                n = UnityEngine.Random.Range (1, 100);
            nr.Add (n);  // here nr is a list<int> that contains the numbers.
        }

        Nr1.text = nr[0].ToString();
        Nr2.text = nr[1].ToString();
        Nr3.text = nr[2].ToString();
        Nr4.text = nr[3].ToString();
        Nr5.text = nr[4].ToString();
        Nr6.text = nr[5].ToString();
        nr.Clear();

    }
    StartCoroutine ("ShowNumbers"); //the ShowNumbers coroutine show the numbers.
}

我正在使用 Unity 4.6(测试版) 附言抱歉英语不好,我来自罗马尼亚。

【问题讨论】:

  • 我认为,您需要根据屏幕大小从脚本中设置所有Nrs的位置。
  • 我该如何设置位置?是否有内置的适当性可以让我调整文本的位置?
  • 如果它们是场景中的游戏对象,我认为它们应该具有变换。在那种情况下transform.postion = new Vector3(1.0f, 2.0f, 3.0f);。或者您可以使用 GUI.Box 完全从脚本创建文本。
  • 感谢您的帮助:D

标签: user-interface unity3d resolution


【解决方案1】:

问题与您的代码无关,而与您的 Canvas 设置有关。选择作为这些 UI 对象的父级的 UI Canvas,您将在那里自动添加名为“Canvas Scaler”的脚本,在那里您可以设置您希望您的 UI 如何对分辨率变化做出反应,尝试尝试因子和缩放模式,直到您会得到满意的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2018-10-22
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2013-06-30
    • 2020-01-22
    相关资源
    最近更新 更多