Получить центральную точку между многими GameObjects в Unity - PullRequest
0 голосов
/ 18 сентября 2018

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

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

У меня уже есть код камеры, но мне все еще нужно знать, как получить эту центральную точку или другой способ сделать это. Кроме того, камера не следует линейно за одной из осей (X, Y, Z), так как она расположена таким образом, что изображение является изометрическим (игра в 3D).

Последний важный факт заключается в том, что все игровые объекты, запущенные в игре (живые), хранятся в public static List <GameObject>, чтобы иметь возможность доступа к компонентам этих игровых объектов в любое время. Также, если персонаж (gameobject) умирает или рождается, список обновляется без проблем.

Я оставляю вам графический пример с тремя различными случаями: черными точками, персонажами на сцене (объектами игры) и красными точками, центральной точкой (вектором), которую я хотел бы найти.

enter image description here

Кроме того, я оставляю код камеры, чтобы вы могли проверить, есть ли у вас какое-либо решение:

public class Camera_Movement : MonoBehaviour {

    Vector3 newPos;
    public static List<GameObject> playersInGame = new List<GameObject>();

    void Update() {

        // Get Central Vector

        // Replace playersInGame[0].transform.position with central vector
        //newPos = Vector3.Lerp(gameObject.transform.position, "central vector", Time.deltaTime);

        newPos = Vector3.Lerp(gameObject.transform.position, playersInGame[0].transform.position, Time.deltaTime);
        gameObject.transform.position = new Vector3(newPos.x, newPos.y, newPos.z);

    }
}

Заранее большое спасибо!

1 Ответ

0 голосов
/ 18 сентября 2018

Вам нужно взять среднее х и среднее у.

Это будет выглядеть следующим образом:

var totalX = 0f;
var totalY = 0f;
foreach(var player in playersInGame)
{
     totalX += player.transform.position.x;
     totalY += player.transform.position.y;
}
var centerX = totalX / playersInGame.Count;
var centerY = totalY / playersInGame.Count;

Дайте мне знать, если это работает для вас (не имеютдоступ к Unity на данный момент), но я собрал пример здесь: https://dotnetfiddle.net/jGd99I

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...