【问题标题】:UIToolkit for Android and Unity适用于 Android 和 Unity 的 UIToolkit
【发布时间】:2013-03-09 23:30:52
【问题描述】:

我正在使用 UIToolkit 在 Unity 上为我的 android 游戏项目制作 GUI。 示例场景(例如厨房水槽)在 Unity 编辑器上运行良好。 但是当我在 android 设备上运行完全相同的示例场景时,它不起作用。 Button Texture 与实际的 Touch Region 略有不同。 我尝试了不同的 Android 设备,但结果都是一样的。

我尝试使用类似的函数访问 Sprite 位置

public float getYpos(this IPositionable sprite )
{
    if(sprite == null)
        return ;
    float toRet = sprite.position.y;
    return toRet;
}

但它的代码返回一个无值!

我什至尝试使用“IPositionablePositioningExtensions”并返回 Sprite 位置。但没有成功。虽然我不知道如何使用“IPositionablePositioningExtensions”,但我刚刚开始在这个领域入门。

我的按钮创建看起来像这样:

    playButton = UIButton.create("playUp.png", "playDown.png",0,0);
    playButton.positionCenter();
    playButton.scale = new Vector3(0.4f,0.4f,0);

这是示例场景在 Android 设备上的屏幕截图。 Bounding box 是 Touch 工作的区域,而 Button 纹理在其他地方渲染。

Button 纹理应该位于中心位置,尽管它会移动到其他位置,而触摸区域仍保持在它应该在的位置。

【问题讨论】:

    标签: android unity3d gui-toolkit


    【解决方案1】:

    找到了解决方案。 onAwake 方法返回的屏幕尺寸与实际屏幕尺寸不同。

    于是在ui.cs文件中的uiCamera中加入如下代码

    public static void setSize()
        {
            _uiCamera.orthographicSize = Screen.height / 2;
            // Set the camera position based on the screenResolution/orientation
            _uiCamera.transform.position = new Vector3( Screen.width / 2, -Screen.height / 2, -10.0f ); 
        }
    

    一旦设置好屏幕就会调用它。

    【讨论】:

      【解决方案2】:

      来自开发者网站上的指南: (...) 不要尝试在 Awake 中创建 UI,因为 UI 脚本可能尚未完成初始化。请改用开始。

      编辑:我以为您是在 awake 方法中创建 ui,但我尝试了自己,即使我按照指南中的建议在 start 方法中创建它,我也遇到了同样的问题。现在我将测试您的解决方案。事实上,如果我更改场景并重新加载 UI 场景而不重新启动应用程序,一切正常。

      【讨论】:

      • 只需在 UI.cs 中添加上述代码,然后从 UI.CS 的 update() 调用一次,或者每次创建屏幕/场景时调用。
      • 我还是想通了,但非常感谢 kyuubi 的回答!
      猜你喜欢
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 2017-07-05
      • 2020-11-02
      • 1970-01-01
      相关资源
      最近更新 更多