Как заставить двух игровых объектов столкнуться друг с другом, используя скрипты в Unity3D - PullRequest
1 голос
/ 03 мая 2019

Я нахожусь в процессе создания игры в шахматы, и я хочу, чтобы фигуры белых команд (0-5 в массиве) и фигуры черных команд (6-11 в массиве) смотрели друг на друга на шахматной доске. Мне удается заставить их появляться, но в настоящее время мне удалось заставить их всех смотреть в одном направлении.

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

Я использую этот код для установки ориентации всех частей:

private Quaternion orientation = Quaternion.Euler(0, 180, 0);

И этот код для появления шахматных фигур на шахматной доске:

private void SpawnChessMan (int index, int x, int y)
{

    GameObject go = Instantiate(ChessManPrefabs[index], GetTileCenter (x,y) , orientation) as GameObject;
    go.transform.SetParent(transform);
    ChessMans[x, y] = go.GetComponent<ChessMan>();
    ChessMans[x, y].SetPosition(x, y);
    ActiveChessMan.Add(go);
}

Код выполняет то, что я ожидаю, но как мне заставить их противостоять друг другу, используя c # для Unity3D?

Ответы [ 2 ]

2 голосов
/ 03 мая 2019

В Unity есть куча полезных инструментов, если вы знаете, где искать.

https://docs.unity3d.com/ScriptReference/Transform.LookAt.html

1 голос
/ 03 мая 2019

Вы можете использовать координаты вашей доски х / у, чтобы определить начальное вращение ваших фигур.Давайте предположим, что ваш белый цвет слева в столбцах x = 1 до 2, а черный справа в столбцах x = 7–8.).

Тогда вы можете изменить свой код следующим образом:

Quaternion rot = Quaternion.Euler(0, (x < 3? 180: -180), 0);
GameObject go = Instantiate(ChessManPrefabs[index], GetTileCenter (x,y) , rot) as GameObject;
...