2016-04-05 6 views
1

Я сделал небольшую 2D-игру, используя unit3D (5.0.2f1). Я перетащил некоторые текстуры, чтобы использовать их в качестве фона в сцене. Он отлично работал в редакторе Unity, но не тогда, когда я построил и запустил его в другом размере окна. Это выглядело не так, как я видел в редакторе Unity.Как настроить текстуру для автоматического соответствия с изменением размера окна с использованием той же текстуры

Что мне сделать, чтобы изменить размер текстуры автоматически при изменении размера окна? Вот скриншот того, как изображение выглядит в редакторе и сборки, а также мои настройки сборки:

Screenshots

+0

Моего английский не является хорошим .so я цветовой атлас Описан проблема лучше! –

+0

Привет. ваша камера. это орфографический? – Fattie

+0

Да! 2D игра Я использовал ортографическую камеру. Основная камера - только камера в моей игре. –

ответ

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"); 
    } 

Примечание. Если вы не знакомы с «расширениями»: quick tutorial.

Здесь вы найдете более удобные расширения.

На самом деле это Переместить объект на экран точек!

Например,

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; 
    } 

Надеется, что это помогает .....

+0

Почему ExtensionHandy не нужно наследовать от MonoBehaviour? –

+0

Как получить MainCamera в статическом классе ExtensionHandy? Я свежий человек в единстве3D.so ... Не могли бы вы помочь мне больше? Большое спасибо. –

+0

Не могли бы вы рассказать мне больше деталей? –