【问题标题】:Unity 2D array tile mapunity 2D 数组平铺贴图
【发布时间】:2017-03-28 04:46:38
【问题描述】:

我是 Unity 和 C# 的新手。然而,我正在尝试制作一个简单的 2D 平台游戏,其中我制作了一个名为 Block 的对象的预制件。我想要做的是创建一个包含 0 和 1 的数组瓦片图,其中 1 是块,0 什么都不是。另外,我不希望瓷砖地图是随机的。我希望从另一个名为 GameController 的对象实例化块。我想要实现的一个完美例子就是这样。

但我真的不知道如何使用数组来做到这一点。我想保持简单,因为我正在尝试学习统一和 c# 的工作方式。任何帮助将不胜感激。

【问题讨论】:

    标签: c# arrays unity3d 2d


    【解决方案1】:

    所以你可以使用资产商店中的一些资产(例如:https://www.assetstore.unity3d.com/en/#!/list/2965-procedural-generation)这是一个相当艰巨的挑战。我会推荐这个视频:https://www.youtube.com/watch?v=k1pWpYEt2UE,但最接近你想要实现的是这个:https://www.youtube.com/watch?v=gIUVRYViG_g 希望对您有所帮助。

    【讨论】:

    • 这个视频确实有帮助,但我想我忘了提到我不希望瓦片地图是随机的,我希望能够指定瓦片是否将通过数组使用0 和 1,1 表示块,0 表示无。
    • 我认为这与您的目标类似:youtube.com/watch?v=93o_Ad5C5Ds 他排列作品的方式是您想要放置标题的方式,唯一的区别是他的数组是 10101010 而不是下一行
    【解决方案2】:

    您可以制作一个二维数组,例如int[40, 100] 并循环两次,如果数组中的数字是一,则将数组中的位置分别乘以块的长度或宽度。例如:

    int[,] positions = new int[40,100];
    
    for (int i = 0; i < 41; i++) {
        for (int j = 0; j < 100; j++) {
            if (positions[i,j] = 1) {
                GameObject temp = Instantiate(block, new Vector3(j * blockWidth, i * blockHeight, 0), Quaternion.identity) as GameObject;
            }
        }
    }
    

    为这么大的数组设置所有坐标需要很长时间,但你可以使用参数循环,或者如果它更小,就用困难的方式来做。否则,我会尝试不使用脚本。

    【讨论】:

    • 这正是我想要做的,谢谢。但是我如何准确地将数组分配给 0 和 1?如果我的问题看起来很愚蠢,我很抱歉。
    • @nico.user,一种方法可能是制作一个网格,如果您单击网格中的一个空间,则在其中添加一个块。然后,在运行后保存网格。这并不容易,但比手动输入所有的 1 和 0 更容易。我想不出更好的方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多