首页 文章

如何在Unity3D中将我的主板保持在不同屏幕尺寸的中心?

提问于
浏览
1

我正在开发一款棋盘游戏 . 我的主板是使用C#脚本动态创建的

/// <summary>
    /// Draws the board of the figure. Call the Load event of the form.
    /// </summary>
    public void DrawingBoard()
    {    
        CubeDark.transform.localScale = new Vector3(3f,2f,3f);      
        CubeLight.transform.localScale =  new Vector3(3f,2f,3f);
        for(int i = 0; i < _boardSize; i++)
        {
            for(int j = 0; j < _boardSize; j++)
            {
                if((i+j)%2 == 0)
                {
                    UnityEngine.Object.Instantiate(CubeDark,new Vector3(i*3,_boardHeight,j*3), Quaternion.identity);    
                }
                else
                {
                    UnityEngine.Object.Instantiate(CubeLight,new Vector3(i*3,_boardHeight,j*3), Quaternion.identity);
                }
            }
        }           
    }

截图:

enter image description here

我现在要做的是缩放相机,以便将电路板放在屏幕的中央(无论屏幕大小如何) .

到目前为止我所尝试的是将下面的脚本附加到我的相机GameObject .

using UnityEngine;
using System.Collections;

public class PositionCamera : MonoBehaviour {

    public float fWidth = 2.0f; // Desired width
    void Start () {
        float xFactor = Screen.width / 1024f;
        float yFactor = Screen.height  / 768f;          
        Camera.main.rect=new Rect(0,0,1,xFactor/yFactor);

    }
}

但不幸的是,它没有用 . 董事会的一部分仍然没有出现 .

所以这里有我的问题:

  • 如何让我的主板以不同的屏幕分辨率和不同的平台(android和独立)为中心?

  • 如何在构建团结项目时使我的游戏窗口可调整大小?

  • 对于Android平台,为什么只有一半的屏幕显示游戏?
    enter image description here

谢谢 .

1 回答

  • 0

    我认为DrawingBoard的中心不在坐标系的中心(0,0,0) .

    我认为你应该从-size / 2实例化为size / 2,而不是从0到size:

    UnityEngine.Object.Instantiate(CubeLight,new Vector3(i*3-_boardSize/2,_boardHeight,j*3-_boardSize/2), Quaternion.identity);
    

    如果你这样做,电路板将始终位于坐标系的中心,因此它将始终位于屏幕的中心,任何分辨率(如果你的相机正在看屏幕的中心 - 你应该检查相机的位置和旋转以确保) .

    此外,重要的是CubeLight和CubeDark的中心位置 . 它应该在立方体的中间 .

    要调整大小和分辨率,请在“编辑/项目设置/播放器/分辨率和演示文稿”下的Unity编辑器中检查设置 .

相关问题