【问题标题】:i want to draw the gameboard with square grid in unity and i am a begineer我想用方形网格统一绘制游戏板,我是初学者
【发布时间】:2020-04-16 07:03:12
【问题描述】:

我想画一个有网格的游戏板我已经尝试过将游戏板宽度居中为总宽度的 80%,高度为总高度的 60%,但它仍然不兼容行和列的所有值查看代码并帮助我

private void SetupGrid()
{
    float height=Camera.main.orthographicSize*2f;
    float width=Camera.main.aspect*height;

    Debug.Log("height:"+height);
    Debug.Log("width:"+width);

    float possibleHeight=0.6f*height;
    float possibleWidth=0.8f*width;

    Debug.Log("possibleHeight:"+possibleHeight);
    Debug.Log("possibleWidth:"+possibleWidth);

    float eachcellWidth=possibleWidth/mWidth;
    float eachcellHeight=possibleHeight/mHeight;

    Debug.Log("eachcellWidth:"+eachcellWidth);
    Debug.Log("eachcellHeight:"+eachcellHeight);

    float cellCenterX=eachcellWidth/2;
    float cellCenterY=eachcellHeight/2;

    Debug.Log("cellCenterX:"+cellCenterX);
    Debug.Log("cellCenterY:"+cellCenterY);

    float offSetBetweenEachCell=eachcellWidth*0.15f;

    float startXpos=-(mWidth/2*eachcellWidth)+cellCenterX;
    float startYpos=-(mHeight/2*eachcellHeight)+cellCenterY;

    Debug.Log("start X position value:"+startXpos);
    Debug.Log("start Y position value:"+startYpos);

    SpriteRenderer spriteRenderer=mTilePrefab.GetComponent<SpriteRenderer>();

    float actualSpriteWidth=spriteRenderer.sprite.bounds.size.x;
    float actualSpriteHeight=spriteRenderer.sprite.bounds.size.y;

    Debug.Log("Actual Sprite width:"+actualSpriteWidth);
    Debug.Log("Actual Sprite Height:"+actualSpriteHeight);

    float finalCellWidth=eachcellWidth-offSetBetweenEachCell;
    float finalCellHeight=eachcellHeight-offSetBetweenEachCell;

    Vector3 eachCellScaleUnit=new Vector3(finalCellWidth/actualSpriteWidth,finalCellHeight/actualSpriteHeight);

    Vector3 referenceVector=Vector3.one;
    GameObject cell=null;
    for(int i=0;i<mWidth;i++)
    {
        for(int j=0;j<mHeight;j++)
        {
            float posX=startXpos+(j*eachcellWidth);
            float posY=startYpos+(i*eachcellHeight);

            referenceVector.x=posX;
            referenceVector.y=posY;

            cell=Instantiate(mTilePrefab,referenceVector,Quaternion.identity);
            cell.transform.localScale=eachCellScaleUnit;
        }
    }
}

但是当我根据行和列缩放它时它不是方形的。

【问题讨论】:

    标签: c# unity3d game-development


    【解决方案1】:

    嗯...我不确定您想要的行为是什么,但是为什么您希望每个网格单元都是方形的?甚至Debug.LogeachcellWidth1.125eachcellHeight1.5。您正在缩放两次,一次从 eachcell 值,一次从 actualSprite 值,因此很难确定要缩放到哪个值。

    如果您想要制作网格,则不必费力。 Unity 已经支持构建网格。尝试阅读this 并加以利用。

    【讨论】:

    • 你能给我发任何教程吗?如何在统一中准确使用内置网格?我是初学者,非常感谢您的帮助
    猜你喜欢
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 2014-03-22
    相关资源
    最近更新 更多