Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
User interface 缩放多分辨率/不同设备的UI_User Interface_Unity3d - Fatal编程技术网

User interface 缩放多分辨率/不同设备的UI

User interface 缩放多分辨率/不同设备的UI,user-interface,unity3d,User Interface,Unity3d,我有一个非常简单的unity GUI,它具有以下方案: 按钮在哪里 GUI在PC上运行良好,并且在屏幕空间:overlay上,因此它应该能够自动适应每个屏幕 但在平板电脑上,整个GUI更小,缩小到屏幕中央,元素周围留有巨大的空白(现在不能加入屏幕截图) 解决这个问题的方法是什么?它是在播放器设置中还是在项目设置中 自动缩放UI需要结合使用锚定点、RecTransform的轴心点和组件。没有图像或视频就很难理解它。这是非常重要的,你彻底了解如何做到这一点和统一提供了完整的视频教程。你可以看它 此

我有一个非常简单的unity GUI,它具有以下方案:

按钮在哪里

GUI在PC上运行良好,并且在
屏幕空间:overlay
上,因此它应该能够自动适应每个屏幕

但在平板电脑上,整个GUI更小,缩小到屏幕中央,元素周围留有巨大的空白(现在不能加入屏幕截图)


解决这个问题的方法是什么?它是在播放器设置中还是在项目设置中

自动缩放UI需要结合使用锚定点、
RecTransform的轴心点和组件。没有图像或视频就很难理解它。这是非常重要的,你彻底了解如何做到这一点和统一提供了完整的视频教程。你可以看它


此外,当使用scrollbar、scrollview和其他类似的UI控件时,组件还用于确保它们适合该布局。

自动缩放UI需要使用锚定、透视点和组件的组合。没有图像或视频就很难理解它。这是非常重要的,你彻底了解如何做到这一点和统一提供了完整的视频教程。你可以看它


此外,当使用scrollbar、scrollview和其他类似的UI控件时,该组件还用于确保它们适合该布局。

MovementRange存在问题。我们也必须调整这个值。 我这样做了:

public int MovementRange = 100;
    public AxisOption axesToUse = AxisOption.Both; // The options for the axes that the still will use
    public string horizontalAxisName = "Horizontal"; // The name given to the horizontal axis for the cross platform input
    public string verticalAxisName = "Vertical"; // The name given to the vertical axis for the cross platform input
    private int _MovementRange = 100;

    Vector3 m_StartPos;
    bool m_UseX; // Toggle for using the x axis
    bool m_UseY; // Toggle for using the Y axis
    CrossPlatformInputManager.VirtualAxis m_HorizontalVirtualAxis; // Reference to the joystick in the cross platform input
    CrossPlatformInputManager.VirtualAxis m_VerticalVirtualAxis; // Reference to the joystick in the cross platform input

    void OnEnable()
    {
        CreateVirtualAxes();
    }

    void Start()
    {
        m_StartPos = transform.position;
        Canvas c = GetComponentInParent<Canvas>();
        _MovementRange = (int)(MovementRange * c.scaleFactor);
        Debug.Log("Range:"+ _MovementRange);
    }

    void UpdateVirtualAxes(Vector3 value)
    {
        var delta = m_StartPos - value;
        delta.y = -delta.y;
        delta /= _MovementRange;
        if (m_UseX)
        {
            m_HorizontalVirtualAxis.Update(-delta.x);
        }

        if (m_UseY)
        {
            m_VerticalVirtualAxis.Update(delta.y);
        }
    }

    void CreateVirtualAxes()
    {
        // set axes to use
        m_UseX = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyHorizontal);
        m_UseY = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyVertical);

        // create new axes based on axes to use
        if (m_UseX)
        {
            m_HorizontalVirtualAxis = new CrossPlatformInputManager.VirtualAxis(horizontalAxisName);
            CrossPlatformInputManager.RegisterVirtualAxis(m_HorizontalVirtualAxis);
        }
        if (m_UseY)
        {
            m_VerticalVirtualAxis = new CrossPlatformInputManager.VirtualAxis(verticalAxisName);
            CrossPlatformInputManager.RegisterVirtualAxis(m_VerticalVirtualAxis);
        }
    }


    public void OnDrag(PointerEventData data)
    {
        Vector3 newPos = Vector3.zero;

        if (m_UseX)
        {
            int delta = (int)(data.position.x - m_StartPos.x);
            delta = Mathf.Clamp(delta, -_MovementRange, _MovementRange);
            newPos.x = delta;
        }

        if (m_UseY)
        {
            int delta = (int)(data.position.y - m_StartPos.y);
            delta = Mathf.Clamp(delta, -_MovementRange, _MovementRange);
            newPos.y = delta;
        }
        transform.position = new Vector3(m_StartPos.x + newPos.x, m_StartPos.y + newPos.y, m_StartPos.z + newPos.z);
        UpdateVirtualAxes(transform.position);
    }
public int MovementRange=100;
public AxisOption axesToUse=AxisOption.Both;//仍将使用的轴的选项
公共字符串horizontalAxisName=“Horizontal”//用于跨平台输入的水平轴的名称
公共字符串verticalAxisName=“垂直”//用于跨平台输入的垂直轴的名称
私有int_MovementRange=100;
Vector3 m_StartPos;
bool m_UseX;//用于使用x轴的切换
bool m_UseY;//用于使用Y轴的切换
CrossPlatformInputManager.VirtualAxis m_HorizontalVirtualAxis;//跨平台输入中的操纵手柄参考
CrossPlatformInputManager.VirtualAxis m_VerticalVirtualAxis;//跨平台输入中的操纵手柄参考
void OnEnable()
{
CreateVirtualAxes();
}
void Start()
{
m_StartPos=变换位置;
Canvas c=getComponentParent();
_MovementRange=(int)(MovementRange*c.scaleFactor);
Log(“范围:”+\u MovementRange);
}
无效更新虚拟机(矢量3值)
{
var delta=m_StartPos-值;
delta.y=-delta.y;
delta/=\u移动范围;
如果(m_UseX)
{
m_HorizontalVirtualAxis.Update(-delta.x);
}
如果(m_UseY)
{
m_VerticalVirtualAxis.Update(delta.y);
}
}
void CreateVirtualAxes()
{
//设置要使用的轴
m|UseX=(axesToUse==AxisOption.Both | | axesToUse==AxisOption.OnlyHorizontal);
m|UseY=(axesToUse==AxisOption.Both | | axesToUse==AxisOption.OnlyVertical);
//基于要使用的轴创建新轴
如果(m_UseX)
{
m_HorizontalVirtualAxis=新的跨平台输入管理器.VirtualAxis(horizontalAxisName);
跨平台输入管理器。RegisterVirtualAxis(m_HorizontalVirtualAxis);
}
如果(m_UseY)
{
m_VerticalVirtualAxis=新的交叉平台输入管理器.VirtualAxis(verticalAxisName);
跨平台输入管理器。RegisterVirtualAxis(m_VerticalVirtualAxis);
}
}
公共void OnDrag(PointerEventData数据)
{
Vector3 newPos=Vector3.0;
如果(m_UseX)
{
int delta=(int)(data.position.x-m_StartPos.x);
delta=数学夹具(delta,-u MovementRange,\u MovementRange);
新位置x=增量;
}
如果(m_UseY)
{
int delta=(int)(data.position.y-m_StartPos.y);
delta=数学夹具(delta,-u MovementRange,\u MovementRange);
新位置y=δ;
}
transform.position=newvector3(m_StartPos.x+newPos.x,m_StartPos.y+newPos.y,m_StartPos.z+newPos.z);
更新虚拟机(转换位置);
}

MovementRange有问题。我们也必须调整这个值。 我这样做了:

public int MovementRange = 100;
    public AxisOption axesToUse = AxisOption.Both; // The options for the axes that the still will use
    public string horizontalAxisName = "Horizontal"; // The name given to the horizontal axis for the cross platform input
    public string verticalAxisName = "Vertical"; // The name given to the vertical axis for the cross platform input
    private int _MovementRange = 100;

    Vector3 m_StartPos;
    bool m_UseX; // Toggle for using the x axis
    bool m_UseY; // Toggle for using the Y axis
    CrossPlatformInputManager.VirtualAxis m_HorizontalVirtualAxis; // Reference to the joystick in the cross platform input
    CrossPlatformInputManager.VirtualAxis m_VerticalVirtualAxis; // Reference to the joystick in the cross platform input

    void OnEnable()
    {
        CreateVirtualAxes();
    }

    void Start()
    {
        m_StartPos = transform.position;
        Canvas c = GetComponentInParent<Canvas>();
        _MovementRange = (int)(MovementRange * c.scaleFactor);
        Debug.Log("Range:"+ _MovementRange);
    }

    void UpdateVirtualAxes(Vector3 value)
    {
        var delta = m_StartPos - value;
        delta.y = -delta.y;
        delta /= _MovementRange;
        if (m_UseX)
        {
            m_HorizontalVirtualAxis.Update(-delta.x);
        }

        if (m_UseY)
        {
            m_VerticalVirtualAxis.Update(delta.y);
        }
    }

    void CreateVirtualAxes()
    {
        // set axes to use
        m_UseX = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyHorizontal);
        m_UseY = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyVertical);

        // create new axes based on axes to use
        if (m_UseX)
        {
            m_HorizontalVirtualAxis = new CrossPlatformInputManager.VirtualAxis(horizontalAxisName);
            CrossPlatformInputManager.RegisterVirtualAxis(m_HorizontalVirtualAxis);
        }
        if (m_UseY)
        {
            m_VerticalVirtualAxis = new CrossPlatformInputManager.VirtualAxis(verticalAxisName);
            CrossPlatformInputManager.RegisterVirtualAxis(m_VerticalVirtualAxis);
        }
    }


    public void OnDrag(PointerEventData data)
    {
        Vector3 newPos = Vector3.zero;

        if (m_UseX)
        {
            int delta = (int)(data.position.x - m_StartPos.x);
            delta = Mathf.Clamp(delta, -_MovementRange, _MovementRange);
            newPos.x = delta;
        }

        if (m_UseY)
        {
            int delta = (int)(data.position.y - m_StartPos.y);
            delta = Mathf.Clamp(delta, -_MovementRange, _MovementRange);
            newPos.y = delta;
        }
        transform.position = new Vector3(m_StartPos.x + newPos.x, m_StartPos.y + newPos.y, m_StartPos.z + newPos.z);
        UpdateVirtualAxes(transform.position);
    }
public int MovementRange=100;
public AxisOption axesToUse=AxisOption.Both;//仍将使用的轴的选项
公共字符串horizontalAxisName=“Horizontal”//用于跨平台输入的水平轴的名称
公共字符串verticalAxisName=“垂直”//用于跨平台输入的垂直轴的名称
私有int_MovementRange=100;
Vector3 m_StartPos;
bool m_UseX;//用于使用x轴的切换
bool m_UseY;//用于使用Y轴的切换
CrossPlatformInputManager.VirtualAxis m_HorizontalVirtualAxis;//跨平台输入中的操纵手柄参考
CrossPlatformInputManager.VirtualAxis m_VerticalVirtualAxis;//跨平台输入中的操纵手柄参考
void OnEnable()
{
CreateVirtualAxes();
}
void Start()
{
m_StartPos=变换位置;
Canvas c=getComponentParent();
_MovementRange=(int)(MovementRange*c.scaleFactor);
Log(“范围:”+\u MovementRange);
}
无效更新虚拟机(矢量3值)
{
var delta=m_StartPos-值;
delta.y=-delta.y;
delta/=\u移动范围;
如果(m_UseX)
{
m_HorizontalVirtualAxis.Update(-delta.x);
}
如果(m_UseY)
{
m_VerticalVirtualAxis.Update(delta.y);
}
}
void CreateVirtualAxes()
{
//斧头