Как настроить текстуру так, чтобы она автоматически соответствовала изменению размера окна с использованием той же текстуры
Я сделал небольшую 2D-игру с помощью unity3D(5.0.2f1). Я перетащил некоторые текстуры для использования в качестве фона в сцене. Это хорошо работало в редакторе Unity, но не тогда, когда я создавал и запускал его в другом размере окна. Это не выглядело так, как я видел в редакторе Unity.
Что я должен сделать, чтобы автоматически изменить размер текстуры при изменении размера окна? Вот скриншот того, как изображение выглядит в редакторе и сборке, а также в моих настройках сборки:
1 ответ
Может быть, это поможет!
//file ExtensionsHandy.cs
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public static class ExtensionsHandy
{
public static float OrthoScreenWidth(this Camera c)
{
return
c.ViewportToWorldPoint(new Vector3(1,1,10)).x
- c.ViewportToWorldPoint(new Vector3(0,1,10)).x;
}
public static float OrthoScreenHeight(this Camera c)
{
return
c.ViewportToWorldPoint(new Vector3(0,1,10)).y
- c.ViewportToWorldPoint(new Vector3(0,0,10)).y;
}
}
попробуй вот так
void Start()
{
float w = Camera.main.OrthoScreenWidth();
Debug.Log("w is " +w.ToString("f4");
}
Заметка. Если вы не знакомы с "расширениями": краткое руководство.
Вот еще несколько очень полезных расширений для вас.
Это фактически переместит объект в точки экрана!
Например,
transform.ScreenRight();
transform.ScreenTop();
объект, теперь в правом верхнем углу экрана!!!
И учтите это......
void Update()
{
transform.ScreenRight();
}
В этом примере: даже если пользователь изменяет ориентацию устройства, даже если пользователь изменяет размер экрана (Mac или Windows), объект ВСЕГДА находится справа от экрана!!
public static Vector3 WP( this Camera c, float x, float y, float z)
{
return c.ViewportToWorldPoint(new Vector3(x,y,z));
}
public static void ScreenLeft(this GameObject moveme)
{
Vector3 rr = moveme.transform.position;
Vector3 leftTop = Camera.main.WP(0f,1f,0f);
float leftX = leftTop.x;
rr.x = leftX;
moveme.transform.position = rr;
}
public static void ScreenRight(this GameObject moveme)
{
Vector3 rr = moveme.transform.position;
Vector3 rightTop = Camera.main.WP(1f,1f,0f);
float rightX = rightTop.x;
rr.x = rightX;
moveme.transform.position = rr;
}
public static void ScreenBottom(this GameObject moveme)
{
Vector3 rr = moveme.transform.position;
Vector3 bottomLeft = Camera.main.WP(0f,0f,0f);
float bottomY = bottomLeft.y;
rr.y = bottomY;
moveme.transform.position = rr;
}
public static void ScreenTop(this GameObject moveme)
{
Vector3 rr = moveme.transform.position;
Vector3 topLeft = Camera.main.WP(0f,1f,0f);
float topY = topLeft.y;
rr.y = topY;
moveme.transform.position = rr;
}
Надеюсь, поможет.....