如何通过使用相同的纹理将纹理设置为自动匹配窗口大小的更改

时间:2016-04-05 15:02:19

标签: unity3d unity5 unity3d-2dtools

我使用unity3D(5.0.2f1)制作了一个小型2D游戏。我拖了一些纹理用作场景中的背景。它在Unity编辑器中运行良好,但在我以不同的窗口大小构建和运行时却没有。它看起来不像我在Unity Editor中看到的那样。

当窗口大小改变时,我该怎么做才能自动更改纹理大小?以下是图像在编辑器和构建中的外观以及构建设置的屏幕截图:

Screenshots

1 个答案:

答案 0 :(得分: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;
    }

希望它有所帮助.....

相关问题