Unity3D Расположите несколько игровых объектов поверх куба, не падая - PullRequest
0 голосов
/ 27 октября 2018

Это для настольной игры. Каждая плитка (куб) может иметь до 6 жетонов сверху. То, что происходит, основано на некоторой логике, я перемещаю токен в верхний центр куба (который работает нормально). Когда другой жетон попадет на ту же поверхность плитки, я хочу, чтобы все жетоны, уже находящиеся на поверхности, отошли и освободили место для входящей плитки.

Прямо сейчас, поскольку у этих токенов есть твердые тела, их отталкивают, но я не очень контролирую, как эти токены должны быть размещены. Основная проблема в том, что мне нужно использовать площадь поверхности куба, чтобы определить точную точку, в которой должен перемещаться тайл. Я не хочу, чтобы он падал или отталкивался от границ куба.

Я думал разместить 6 пустых игровых объектов как детей в кубе, в котором есть возможные области, по которым токен может перемещаться по поверхности. Но тогда дочерние локальные координаты и координаты токена различаются.

Какие существуют подходы?

enter image description here

1 Ответ

0 голосов
/ 27 октября 2018

Подход заключается в создании сценария для блока, подобного приведенному ниже, содержащему.

  1. Индекс количества токенов, присутствующих на нем, и
  2. Массив позиций vector2 (рассмотрим матрицу 3 * 3)
  3. И расстояние от центра до кратного с позициями.

Таким образом, при добавлении токена в куб вам нужно будет пройти позицию плиток куба (это будет центр плитки куба, поэтому я назвал ее кубическим центром) и токен, который нужно добавить.

сначала проверьте, равен ли индекс -1, то есть токенов нет, поэтому поместите токен в центр (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)|

код в 3d, так как я видел синюю ось z, вам придется изменить его в зависимости от того, как вы храните / перемещаете токены.

     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;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...