Grid / Block Terrain GameObject - PullRequest
       27

Grid / Block Terrain GameObject

0 голосов
/ 15 апреля 2020

Я пытаюсь изучать Unity, но у меня большой опыт работы с C# в качестве профессионального разработчика, поэтому этот вопрос касается исключительно того, как представить модель в Unity.

Я пытаюсь построить рельеф на основе блоков с более мелкозернистой высотой, моя модель выглядит примерно так:

[
    {
        "x":0,
        "y":0.2,
        "z":0,
        "type": "grass"
    },
    {
        "x":1,
        "y":0.3,
        "z":0,
        "type": "grass"
    },
    {
        "x":0,
        "y":0.1,
        "z":1,
        "type": "stone"
    },
    {
        "x":1,
        "y":0.4,
        "z":1,
        "type": "stone"
    }
]

Я вижу 2 варианта:

  1. Создание куба для каждого блока.
  2. Создайте me sh для открытых поверхностей всех блоков, объединенных вместе, если смотреть сверху.

1 кажется простым, но потенциально медленным, тогда как 2 кажется лучшим подходом , но я не понимаю, как go применять различные текстуры для каждого блока.

1 Ответ

1 голос
/ 15 апреля 2020

В зависимости от того, создаете ли вы какой-нибудь мир Minecraft или просто воксельную местность, у вас могут быть разные решения.

Простое решение состоит в использовании четырехугольников вместо кубов: вместо этого куб состоит из 6 четырехугольников. Создавая каждый куб, вы можете создать каждый квад для выставленных поверхностей, сохранить производительность и легко реализовать, если это простая местность.

Если вам нужны более сложные структуры, как в Minecraft, вы можете реализовать более сложные алгоритмы, в которых вы создаете (и обновляете) каждый полигон оптимизированным способом, например алгоритм Greedy Meshing . Здесь - это реализация Unity.

Также вы можете взглянуть на DOTS Unity, где система компонентов Entity обещает производительность при большом количестве объектов.

Пример видео о том, как будет выглядеть использование Unity DOTS + Greedy Meshing.

...