Unity3D在立方体上排列多个游戏对象而不会掉落

时间:2018-10-27 05:57:51

标签: unity3d

这是一个棋盘游戏。每个图块(一个立方体)顶部最多可以有6个令牌。发生的事情基于某种逻辑,我将令牌移动到多维数据集的顶部中心(工作正常)。当另一个标记进入同一图块表面时,我希望该表面上已经存在的所有标记都移开并为传入的图块留出空间。

现在,由于这些令牌具有刚性主体,它们被推开了,但是我对如何放置这些令牌没有太多控制权。主要问题是我需要利用立方体的表面积来确定瓷砖应移动的确切点。我不希望它掉落或推离立方体边界。

我当时正在考虑将6个空的游戏对象作为儿童放置在多维数据集中,该多维数据集具有可能在表面上移动令牌的区域。但是子局部坐标和令牌坐标不同。

可以使用哪种方法?

enter image description here

1 个答案:

答案 0 :(得分:1)

一种方法是为该块创建一个脚本,如下所示。

  1. 当前存在多少令牌和
  2. 的索引
  3. vector2位置的数组(考虑3 * 3矩阵)
  4. 以及从中心值到带有位置的倍数的距离。

因此,在向多维数据集中添加令牌时,您必须传递多维数据集磁贴的位置(它将是多维数据集磁贴的中心,因此我将其称为cubeCenter)和要添加的令牌。

首先检查索引是否为-1,这意味着没有令牌,因此请将令牌放置在center(cubeCenter)并将索引递增到0。

其他 将前一个令牌的位置更改为pos [index] * distanceFromCubeCenter + cubeCenter,增加索引并将新令牌的位置设置为cubeCenter。

请考虑如果多维数据集块位于(3,0,3)且中心已经有一个标记,因此索引将为0。如果另一个标记到来,则旧标记的位置将为(- 1 * 0.3 + 3,0,-1 * 0.3 + 3)=(2.7,0,2.7)并将令牌放置在图像的左下方,而新令牌将位于中间。同样,如果另一个令牌出现,则位于中心的令牌将像图像的底部中心一样到达(3,0,2.7)。

3 * 3矩阵,但在这种情况下,仅使用5个位置。

| (-1,0,1) |(0,0,1) |(1,0,1) |
| (-1,0,0) |(0,0,0) |(1,0,0) |
| (-1,0,-1)|(0,0,-1)|(1,0,-1)|

由于我看到了蓝色的z轴,因此代码是3d格式的,您将不得不根据存储/移动令牌的方式进行更改。

     int index = -1;
    public Vector3[] pos; //(-1,0,-1),(0,0,-1),(1,,0,0),(-1,,0,1),(0,0,1)
    public float distanceFromCubeCenter = 0.3f; // spacing from the center of the cube

    public void AddToCube(Vector3 cubeCenter,GameObject token)
    {
        if (index == -1)  //only for the first token on cube
        {
            token.transform.position = cubeCenter; 
            index++; // increment index to 0
        }
        else
        {
            previousTokenOnThisCube.transform.position = pos[index] * distanceFromCubeCenter + cubeCenter;
            index++;
            token.transform.position = cubeCenter;
        }
    }