我有Canvas
。
我使用以下代码在场景中的3D对象上方创建了一些Text
元素:
Vector3 screenPos = Camera.main.WorldToScreenPoint(this.dices[x, z].transform.position);
screenPos.x -= 25;
screenPos.y += 10;
newScoreItem.GetComponent<RectTransform>().anchoredPosition = screenPos;
在Android上,我的UI元素很小,所以我将周围的Canvas` UI缩放模式设置为&#34;缩放屏幕大小&#34;。
问题是我用上面代码确定的位置与缩放画布的位置不匹配。我的Text
元素已缩放,但位置完全错误。
我该如何解决这个问题?
正确定位(在Mac上):
使用Scale with screen size
(在Android上)错误定位(在screne的某处):
答案 0 :(得分:2)
您可以设置一个背景。
将所有内容设置为背景。
// Use this for initialization
void Start()
{
resizeSprite();
}
void resizeSprite()
{
SpriteRenderer bgSprite = GetComponent<SpriteRenderer>();
float screenHeight = Camera.main.orthographicSize * 2;
float screenWidth = screenHeight / Screen.height * Screen.width;
transform.localScale = new Vector3(screenWidth / bgSprite.sprite.bounds.size.x, screenHeight / bgSprite.sprite.bounds.size.y, 1);
}
改变了一切大小以设计分辨率的头像。
答案 1 :(得分:1)
首先检查文本“newScoreItem”的Anchor Min / Max:屏幕上的点0,0位于左下角,因此Anchors Min / Max应为0(左下角)。
第二 - 重要的是你是如何设置屏幕匹配模式的。 如果设置为匹配宽度或高度,则可以使用以下脚本:
float refWidth = 800f; // reference resolution - width - set in Canvas Scaler
float refHeight = 480f; // reference resolution - height - set in Canvas Scaler
bool matchWidth = true; //true if screen match mode is set to match the width,
//false if is set to match the height
Vector3 screenPos = Camera.main.WorldToScreenPoint(this.dices[x,y].transform.position);
if (matchWidth) {
screenPos.x *= refWidth / Screen.width;
screenPos.y *= refWidth / Screen.width;
} else {
screenPos.x *= refHeight / Screen.height;
screenPos.y *= refHeight / Screen.height;
}
screenPos.x -= 25f;
screenPos.y += 10f;
newScoreItem.GetComponent<RectTransform>().anchoredPosition = screenPos;
它对我有用,虽然可能有更容易的方法。