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