Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 统一与安全是问题_Ios_Unity3d - Fatal编程技术网

Ios 统一与安全是问题

Ios 统一与安全是问题,ios,unity3d,Ios,Unity3d,我曾尝试在unity中创建一款游戏,并在任何苹果设备的ios上构建它。除了iphone x之外,没有任何问题。截图如下。。它被iphone x刻痕覆盖,当角色在左边或右边时,它被切成两半。有没有其他解决方案或插件可以用来解决这个问题?。有统一的settins或xcode设置吗。谢谢你关于iPhone X凹口,你可以使用: 这是一种确定屏幕实际“安全区域”的方便方法。请在中阅读更多关于它的信息 关于将角色切成两半,这可能是您需要根据游戏逻辑手动处理的事情。通过获取屏幕.width-您应该能够调整相

我曾尝试在unity中创建一款游戏,并在任何苹果设备的ios上构建它。除了iphone x之外,没有任何问题。截图如下。。它被iphone x刻痕覆盖,当角色在左边或右边时,它被切成两半。有没有其他解决方案或插件可以用来解决这个问题?。有统一的settins或xcode设置吗。谢谢你

关于iPhone X凹口,你可以使用:

这是一种确定屏幕实际“安全区域”的方便方法。请在中阅读更多关于它的信息


关于将角色切成两半,这可能是您需要根据游戏逻辑手动处理的事情。通过获取
屏幕.width
-您应该能够调整相机(缩小)或限制字符移动,使其不会超过屏幕边缘

对于iPhone X和其他凹口手机,您可以使用Unity 2017.2.1+提供的generic Screen.safeArea。将下面的脚本附加到全屏UI面板(锚定0,0到1,1;枢轴0.5,0.5),它将根据屏幕安全设置自己的形状

还建议将画布设置为“按屏幕大小缩放”和“匹配(宽度-高度)”=0.5

公共类安全区:单一行为
{
矩形变换面板;
Rect LastSafeArea=新的Rect(0,0,0,0);
无效唤醒()
{
Panel=GetComponent();
刷新();
}
无效更新()
{
刷新();
}
无效刷新()
{
Rect safeArea=GetSafeArea();
if(安全区域!=上次安全区域)
Applysaea(安全区域);
}
Rect GetSafeArea()
{
返回屏幕。安全区域;
}
无效应用程序(矩形r)
{
最后安全面积=r;
向量2锚定蛋白=右位;
矢量2锚定X=r位置+r尺寸;
anchorMin.x/=屏幕宽度;
anchorMin.y/=屏幕高度;
anchorMax.x/=屏幕宽度;
anchorMax.y/=屏幕高度;
Panel.anchorMin=anchorMin;
Panel.anchorMax=anchorMax;
}
}

为了更深入的分析,我在这里写了一篇带有截图的详细文章:。希望有帮助

感谢idea man,我所做的是,我创建了一个代码,能够检测设备类型(iphonex),如果它是真的,那么它将自动调整相机,我认为这是最好的方法。在画布等其他部件上,同样的东西检测设备类型,然后手动调整。@DulfKoher这也是一种解决方法:)请注意,更多带有Notch的设备将很快问世(现在实际上还有其他设备)。当使用Screen.safeArea时——您可以为所有情况提供解决方案(如果Unity团队能够让它保持活力的话)——而为iPhone X提供特定的解决方案是好的——它不是非常健壮。需要注意的一点是,Screen.safeArea仅在Unity视图初始化后才返回实际的safeArea。我试着先从一个优先级为-90的脚本的Awake()调用,它会返回全屏区域。。。将其移动到Start()修复了该问题。@CthulhuJon当前Screen.safeArea仅在2017.2.1+中有效。对于Android notch支持,Unity开发人员表示,目前正在进行v2018.3或更高版本的开发,可能不会向后移植到2017.4。鉴于此信息,很不幸,系统似乎不太可能被后端口到5.6。如果iOS.DeviceGeneration可以在5.6中返回X系列值,那么您可以硬编码手动安全区域系统,类似于我在文章中创建模拟安全区域的方式,但我不相信他们已经或将要把这些新设备的枚举添加到5.6中。如果有办法在5.6上使用插件或其他方法检测iPhone X,您可以这样做。
Screen.safeArea
public class SafeArea : MonoBehaviour
{
    RectTransform Panel;
    Rect LastSafeArea = new Rect (0, 0, 0, 0);

    void Awake ()
    {
        Panel = GetComponent<RectTransform> ();
        Refresh ();
    }

    void Update ()
    {
        Refresh ();
    }

    void Refresh ()
    {
        Rect safeArea = GetSafeArea ();

        if (safeArea != LastSafeArea)
            ApplySafeArea (safeArea);
    }

    Rect GetSafeArea ()
    {
        return Screen.safeArea;
    }

    void ApplySafeArea (Rect r)
    {
        LastSafeArea = r;

        Vector2 anchorMin = r.position;
        Vector2 anchorMax = r.position + r.size;
        anchorMin.x /= Screen.width;
        anchorMin.y /= Screen.height;
        anchorMax.x /= Screen.width;
        anchorMax.y /= Screen.height;
        Panel.anchorMin = anchorMin;
        Panel.anchorMax = anchorMax;
    }
}