⛏️Minecraft на Unity3D. Часть 1

แชร์
ฝัง
  • เผยแพร่เมื่อ 28 ธ.ค. 2024

ความคิดเห็น • 302

  • @Shineglow
    @Shineglow 2 ปีที่แล้ว +116

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

    • @Veyron104
      @Veyron104 2 ปีที่แล้ว +19

      потому что любая ошибка это опыт) т.е. получаем в несколько раз больше опыта чем с идеальным кодом)

    • @PIVKOooo
      @PIVKOooo 2 ปีที่แล้ว +13

      Когда что-то делается впервой - без ошибок не обойтись.
      Хотя, будем честны, даже не в первой - достаточно много времени должно пройти, когда ты сможешь делать, зная все подводные камни наперёд.

    • @DygDyg1000
      @DygDyg1000 2 ปีที่แล้ว +10

      Я понял такую вещь, хороший программист тот, кто быстро может нагуглить решение своей проблемы.

  • @Shineglow
    @Shineglow 2 ปีที่แล้ว +42

    Классс. Твои уроки одни из лучших. А такая серия вероятно окажется брилиантом на твоём канале.

  • @sevenseven2687
    @sevenseven2687 2 ปีที่แล้ว +10

    Очень рад, что ты возобновил выпуск роликов)) хотелось бы увидеть ролик про multiplayer в unity, возможно серию роликов как про фотон в своё время была))

    • @Saltant
      @Saltant 2 ปีที่แล้ว

      Зачем фотон если есть уже мультик от юнитеков. Netcode.

  • @robertbaran1216
    @robertbaran1216 ปีที่แล้ว +4

    Одни из лучших видосов на ютубе по юнити имхо. Недавно закончил смотреть курс Сакутина по шарпу и вот переключился на твои туториалы по юнити - это просто нечто, все круто и что самое главное, можно учиться и на твоих ошибках 🔥

  • @gkenjutsu
    @gkenjutsu 2 ปีที่แล้ว +4

    Спасибо за видос и что вернулся и живой! Продолжай выпускать видосы!

  • @doctorixx_
    @doctorixx_ 2 ปีที่แล้ว +2

    Ты вернулся! Ура

  • @tonykeepfrozen
    @tonykeepfrozen 2 ปีที่แล้ว +5

    Совершенно не занимаюсь юнити разработкой, но видео посмотрел с удовольствием) Спасибо)

  • @andreyzyablikov9891
    @andreyzyablikov9891 2 ปีที่แล้ว +12

    Отличная идея для серии видео, будет безумно интересно посмотреть/послушать о реализации!

  • @saprykinzxc
    @saprykinzxc 2 ปีที่แล้ว +3

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

  • @txdd21
    @txdd21 7 หลายเดือนก่อน +7

    Код из видео(без ошибок):
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    [RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
    public class ChunkRenderer : MonoBehaviour
    {
    private const int ChunkWidth = 10;
    private const int ChunkHeight = 128;
    public int[,,] Blocks = new int[ChunkWidth, ChunkHeight, ChunkWidth];
    private List verticies = new List();
    private List triangles = new List();
    void Start()
    {
    Mesh chunkMesh = new Mesh();
    Blocks[0, 0, 0] = 1;
    Blocks[1, 0, 0] = 1;
    for (int y = 0; y < ChunkHeight; y++)
    {
    for (int x = 0; x < ChunkWidth; x++)
    {
    for (int z = 0; z < ChunkWidth; z++)
    {
    GenerateBlock(x, y, z);
    }
    }
    }
    chunkMesh.vertices = verticies.ToArray();
    chunkMesh.triangles = triangles.ToArray();
    chunkMesh.RecalculateNormals();
    chunkMesh.RecalculateBounds();
    GetComponent().mesh = chunkMesh;
    }
    private void GenerateBlock(int x, int y, int z)
    {
    var blockPosition = new Vector3Int(x, y, z);
    if (GetBlockAtPosition(blockPosition) == 0) return;
    if (GetBlockAtPosition(blockPosition + Vector3Int.right) == 0) GenerateRightSide(blockPosition);
    if (GetBlockAtPosition(blockPosition + Vector3Int.left) == 0) GenerateLeftSide(blockPosition);
    if (GetBlockAtPosition(blockPosition + Vector3Int.forward) == 0) GenerateFrontSide(blockPosition);
    if (GetBlockAtPosition(blockPosition + Vector3Int.back) == 0) GenerateBackSide(blockPosition);
    if (GetBlockAtPosition(blockPosition + Vector3Int.up) == 0) GenerateTopSide(blockPosition);
    if (GetBlockAtPosition(blockPosition + Vector3Int.down) == 0) GenerateBottomSide(blockPosition);
    }
    private int GetBlockAtPosition(Vector3Int blockPosition)
    {
    if (blockPosition.x >= 0 && blockPosition.x < ChunkWidth &&
    blockPosition.y >= 0 && blockPosition.y < ChunkHeight &&
    blockPosition.z >= 0 && blockPosition.z < ChunkWidth)
    {
    return Blocks[blockPosition.x, blockPosition.y, blockPosition.z];
    }
    else
    {
    return 0;
    }
    }
    private void GenerateRightSide(Vector3Int blockPosition)
    {
    verticies.Add(new Vector3(1, 0, 0) + blockPosition);
    verticies.Add(new Vector3(1, 1, 0) + blockPosition);
    verticies.Add(new Vector3(1, 0, 1) + blockPosition);
    verticies.Add(new Vector3(1, 1, 1) + blockPosition);
    AddLastVerticiesSquare();
    }
    private void GenerateLeftSide(Vector3Int blockPosition)
    {
    verticies.Add(new Vector3(0, 0, 0) + blockPosition);
    verticies.Add(new Vector3(0, 0, 1) + blockPosition);
    verticies.Add(new Vector3(0, 1, 0) + blockPosition);
    verticies.Add(new Vector3(0, 1, 1) + blockPosition);
    AddLastVerticiesSquare();
    }
    private void GenerateFrontSide(Vector3Int blockPosition)
    {
    verticies.Add(new Vector3(0, 0, 1) + blockPosition);
    verticies.Add(new Vector3(1, 0, 1) + blockPosition);
    verticies.Add(new Vector3(0, 1, 1) + blockPosition);
    verticies.Add(new Vector3(1, 1, 1) + blockPosition);
    AddLastVerticiesSquare();
    }
    private void GenerateBackSide(Vector3Int blockPosition)
    {
    verticies.Add(new Vector3(0, 0, 0) + blockPosition);
    verticies.Add(new Vector3(0, 1, 0) + blockPosition);
    verticies.Add(new Vector3(1, 0, 0) + blockPosition);
    verticies.Add(new Vector3(1, 1, 0) + blockPosition);
    AddLastVerticiesSquare();
    }
    private void GenerateTopSide(Vector3Int blockPosition)
    {
    verticies.Add(new Vector3(0, 1, 0) + blockPosition);
    verticies.Add(new Vector3(0, 1, 1) + blockPosition);
    verticies.Add(new Vector3(1, 1, 0) + blockPosition);
    verticies.Add(new Vector3(1, 1, 1) + blockPosition);
    AddLastVerticiesSquare();
    }
    private void GenerateBottomSide(Vector3Int blockPosition)
    {
    verticies.Add(new Vector3(0, 0, 0) + blockPosition);
    verticies.Add(new Vector3(1, 0, 0) + blockPosition);
    verticies.Add(new Vector3(0, 0, 1) + blockPosition);
    verticies.Add(new Vector3(1, 0, 1) + blockPosition);
    AddLastVerticiesSquare();
    }
    private void AddLastVerticiesSquare()
    {
    triangles.Add(verticies.Count - 4);
    triangles.Add(verticies.Count - 3);
    triangles.Add(verticies.Count - 2);
    triangles.Add(verticies.Count - 3);
    triangles.Add(verticies.Count - 1);
    triangles.Add(verticies.Count - 2);
    }
    }

    • @txdd21
      @txdd21 7 หลายเดือนก่อน +2

      Также код террейн генератора
      В ChunkRenderer в строках
      private const int ChunkWidth = 10;
      private const int ChunkHeight = 128;
      замените private на public.
      И строки
      Blocks[0, 0, 0] = 1;
      Blocks[1, 0, 0] = 1;
      замените на
      Blocks = TerrainGenerator.GenerateTerrain((int)transform.position.x, (int)transform.position.z);
      Код TerrainGenerator:
      using UnityEngine;
      public static class TerrainGenerator
      {
      public static int[,,] GenerateTerrain(int xOffset, int zOffset)
      {
      var result = new int[ChunkRenderer.ChunkWidth, ChunkRenderer.ChunkHeight, ChunkRenderer.ChunkWidth];
      for (int x = 0; x < ChunkRenderer.ChunkWidth; x++)
      {
      for (int z = 0; z < ChunkRenderer.ChunkWidth; z++)
      {
      float height = Mathf.PerlinNoise((x + xOffset) * .2f, (z + zOffset) * .2f) * 5 + 10;
      for (int y = 0; y < height; y++)
      {
      result[x, y, z] = 1;
      }
      }
      }
      return result;
      }
      }

    • @Stendoffer2_rsnt
      @Stendoffer2_rsnt 2 หลายเดือนก่อน +1

      Лучший

    • @danilalike
      @danilalike 2 หลายเดือนก่อน

      здоровье тебе и близким

  • @deniscooper09
    @deniscooper09 2 ปีที่แล้ว +4

    Очень интересно, продолжай в том же духе!

  • @kuellhyk
    @kuellhyk 2 ปีที่แล้ว +5

    Было бы интересно посмотреть на создание плюс-минус реалистичного генератора рек в этом проекте, с местами вытекания и впадения. Отличная подача, удачи в проекте!

  • @vladimirkalugin-devstudio9721
    @vladimirkalugin-devstudio9721 2 ปีที่แล้ว +1

    Не смотрел сразу лайк, чувак твои видео всегда в радость)

  • @Shineglow
    @Shineglow 2 ปีที่แล้ว +7

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

    • @shitposting_box
      @shitposting_box 2 ปีที่แล้ว +4

      Не знаю, почему надо приучиваться, если достаточно ленивый, то изначально харит переписывать строчки, которые уже писал и хочется вынести в функцию)

  • @_mirai
    @_mirai 2 ปีที่แล้ว +2

    Надо же
    Собирался как раз делать свой майнкрафт и бац) Новый ролик
    Спасибо

  • @DALBA4B
    @DALBA4B ปีที่แล้ว +1

    Очень круто, ждал какого-то ролика и не думал о таком, но с твоей подачей даже это интересно смотреть и слушать!

  • @МирославМалюсейко
    @МирославМалюсейко 2 ปีที่แล้ว +1

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

  • @schwut
    @schwut 2 ปีที่แล้ว +1

    Интересно, жду следующие видосы из цикла!

  • @worldforgamedev
    @worldforgamedev 2 ปีที่แล้ว +1

    Как это целую неделю ждать??????????
    Давай хотя бы через день или 2, ну много неделя, оочень много, с таким наслождением я давно не смотрел ролик в ютубе!

  • @Devel-rd8ge
    @Devel-rd8ge 2 ปีที่แล้ว +1

    Ты не представляешь как я ждал что-то подобное

  • @last_thylacine
    @last_thylacine 2 ปีที่แล้ว +29

    Кажется мы наблюдаем начало долгого путешествия длиною в десятки тысяч чанков

  • @RVS89
    @RVS89 2 ปีที่แล้ว +1

    Очень круто продолжай

  • @AlexStraga
    @AlexStraga 2 ปีที่แล้ว +1

    Разрешите слегка прикопаться )
    15:39 - можно сразу без else return )
    А так клево, прям тоже хотел сесть разбираться с майном, для меня очень востребовано)
    По генерации я так понял уже все записано, но если интересно в Онигири вроде видел генерацию.

  • @МаксКузнец-п1б
    @МаксКузнец-п1б 2 ปีที่แล้ว

    Круто что продолжаешь делать видива!

  • @ephitariathegame2brainstud996
    @ephitariathegame2brainstud996 2 ปีที่แล้ว +2

    Отлично, класс, спасибо. Хорошо, что ты вернулся.

  • @siviristm9668
    @siviristm9668 2 ปีที่แล้ว +3

    Спасибо за отличное видео! Впр пока все достаточно просто, но когда я пытался сделать свой кубический клон, испытал кучу проблем именно с материалами, эх, сколько убитых нервных клеток было(* Даже вспоминать страшно. С нетерпением жду продолжение

  • @proKaps
    @proKaps 2 ปีที่แล้ว +1

    Вот это нереально полезно! Спасибо! Лучше серию уроков и представить сложно

  • @Natharcheck
    @Natharcheck 2 ปีที่แล้ว

    Нужная механика и самый классный Unity разработчик на Ютубе 😍

  • @DimokFa
    @DimokFa 2 ปีที่แล้ว +1

    Отличный канал, Ты можешь.

  • @presentlife5677
    @presentlife5677 2 ปีที่แล้ว +1

    Привет!
    Круто делаешь, очень интересно наблюдать)

  • @darkfunnel685
    @darkfunnel685 2 ปีที่แล้ว +1

    Вау, проект очень сложный и интересный. Давно слежу за тобой, ты красавчик 💪

  • @serp2439
    @serp2439 2 ปีที่แล้ว +1

    Спасибо огромное за подсказки лайк автоматом, а за идею и другие ролики подписка))

  • @Veyron104
    @Veyron104 2 ปีที่แล้ว +3

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

  • @globalacademyorigina1
    @globalacademyorigina1 7 หลายเดือนก่อน

    Все получилось, спасибо автору. Много чего не понятно, потому что я не настолько искушен в программировании, да и С# осваиваю самостоятельно. Однако, кто из новичков столкнется с проблемами в данном видео (ввиде неправильной генерации блоков) попробуйте поменять лево и право, скорее всего как и у автора у вас будет такая же проблема.)

  • @communism8037
    @communism8037 2 ปีที่แล้ว +13

    Мы сейчас увидим чертовски мощную оптимизацию 3д мира из миллиарда деталек (в данном случае блоков)? Вот это по мне, нравится.

    • @F1ory
      @F1ory ปีที่แล้ว

      Такая оптимизация используеться во всех вокссельных мирах, если тебе это интересно посмотри про greed meshing это уже посложнее

    • @F1ory
      @F1ory ปีที่แล้ว

      Но и рендер чанка ускоряеться в несколько раз

  • @notdimrb
    @notdimrb 2 ปีที่แล้ว

    ооо, прикольный проэкт, хорошая идея!)

  • @uralfansoft
    @uralfansoft 2 ปีที่แล้ว

    Капееец, какая крутая тема и какая крутая реализация, я просто в афиге, открыл чтобы просто посмотреть как это всё делается, но чёт сейчас хочется повторить.

    • @NeznamoAnonimovich
      @NeznamoAnonimovich 2 ปีที่แล้ว

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

    • @Mehozavr
      @Mehozavr 2 ปีที่แล้ว +1

      @@NeznamoAnonimovich создавать класс под каждый логический примитив это верный путь увести производительность в ноль. Когда надо обрабатывать блоки миллионами, приходится отсекать лишние абстракции и работать с чистыми массивами и структурами.
      Абстракции можно расположить уровнем выше, на сущностях и чанках

  • @GoodRabir
    @GoodRabir 2 ปีที่แล้ว

    Спасибо, что сделал этот видос, как раз хочу начать разрабатывать игру с графикой похожей на Майнкрафт

  • @lapish9956
    @lapish9956 2 ปีที่แล้ว

    Очень круто! Жду следующих видео.

  • @VBAproject
    @VBAproject 2 ปีที่แล้ว +2

    Да это полезно знать, что можно делать с мешь сеткой на низком уровне. Очень интересно. Хотелось по подробнее немного

  • @CorpusDeSageArchive
    @CorpusDeSageArchive 2 ปีที่แล้ว +1

    Это. Просто. Охрененно.

  • @WeslomPo
    @WeslomPo 2 ปีที่แล้ว

    Респект за панель справа :). Такая же фигня. Заметил когда переключал рабочие столы и напоролся на твою панель, и почему-то там были не те программы что у меня. Не сразу понял в чем дело. Ахаха.

  • @vitugazi1709
    @vitugazi1709 2 ปีที่แล้ว

    Выглядит максимально щикорно

  • @dogek473
    @dogek473 2 ปีที่แล้ว +2

    Про материалы очень интересно будет послушать!
    Да и в целом ролик очень крутой.

  • @region34cg
    @region34cg 2 ปีที่แล้ว

    Очень интересно, будем посмотреть.

  • @shelikhann
    @shelikhann 2 ปีที่แล้ว

    Наконец-то ты вернулся

  • @stingerfingerr1599
    @stingerfingerr1599 2 ปีที่แล้ว +1

    Очень интересное видео. Я в предвкушении что будет дальше. Действительно круто, автор молодец.

  • @tilmat3161
    @tilmat3161 2 ปีที่แล้ว +1

    Очень жду продолжения, автор продолжай пожалуйста)😃

  • @funckin1205
    @funckin1205 2 ปีที่แล้ว +1

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

  • @MrElektron1
    @MrElektron1 2 ปีที่แล้ว

    Годнота, очень полезно для прокачки навыков!

  • @dingoswill8897
    @dingoswill8897 2 ปีที่แล้ว

    Великолепный обучающий видос

  • @ПавелГолубев-п8о
    @ПавелГолубев-п8о 2 ปีที่แล้ว

    Вижу новый ролик ставлю сразу лайк)

  • @lozzy3210
    @lozzy3210 2 ปีที่แล้ว +1

    0:00 - наверное очередное проходное видео для просмотров.
    0:05 - а это уже интересно
    0:20 - таааак
    0:26 - таааааааак
    0:30 - ну, это я уже видел.
    4:17 ну тут я бы сделал 0, 1, 2. 0 - воздух, 1 - земля, а 2 - камень, что бы потом не переписывать код с высотами. (тут я могу быть не прав, просто сказал свой личный ход мысли)

  • @USSR900
    @USSR900 2 ปีที่แล้ว

    Круть, лучший канал по программированию !

  • @mr.croller
    @mr.croller ปีที่แล้ว

    Топ контент, как всегда

  • @TreeHundredBucks
    @TreeHundredBucks 2 ปีที่แล้ว +1

    Отличный урок.Спасибо большое,давно хотел сделать нечто подобное,но не сильно понимал,как работает генерация меша .

  • @ClintFlames
    @ClintFlames ปีที่แล้ว

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

  • @lkghost7
    @lkghost7 2 ปีที่แล้ว

    делай что угодно. буду ставить лайки комментарии писать, что бы видео продвигалось )

  • @The_Mavrik
    @The_Mavrik 2 ปีที่แล้ว

    Класс. Спасибо тебе за такие классные ролики

  • @ПавелЩипанский-ы5ш
    @ПавелЩипанский-ы5ш 2 ปีที่แล้ว

    Магия за 20 минут. Жду продолжения))

  • @zibzikon3952
    @zibzikon3952 2 ปีที่แล้ว +3

    6:42 . Кстати лайфхак, для того чтобы изменить положение строки в райдере нужно нажать Ctrl+Alt+Shift+Up или Ctrl+Alt+Shift+Down, а если стоят хоткеи как в VS то Alt+Down или Alt+Up

  • @mdmm_yt
    @mdmm_yt 2 ปีที่แล้ว +1

    Как всегда информативно и с простой подачей

  • @KoliaBoroda
    @KoliaBoroda ปีที่แล้ว

    Продолжайте было интересно

  • @pozvonochnikkk
    @pozvonochnikkk 2 ปีที่แล้ว

    Выглядит легко и лаконично, спасибо.

  • @НиколайБелковский-ф2н
    @НиколайБелковский-ф2н 2 ปีที่แล้ว

    Очень круто, хотим продолжения!

  • @legohistory8039
    @legohistory8039 2 ปีที่แล้ว +1

    Топ 👍👍👍

  • @andreyas44
    @andreyas44 2 ปีที่แล้ว +4

    Очень много меняешь строчки местами, так что вот лайфхак для райдера - Ctrl + alt + up arrow/down arrow чтобы переместить строку. Очень удобно) еще можно целые функции перемещать, вроде еще шифт тогда надо зажать
    P.s. за лайфхак с константами (Ctrl+alt+f) - отдельное спасибо)

  • @alex_48_
    @alex_48_ 2 ปีที่แล้ว +1

    По размеру блоков больше похоже на терарию чем на майн, но красиво вышло

  • @gm_Maker
    @gm_Maker 2 ปีที่แล้ว

    Найс! Спасибо за видео :)

  • @mroxide.official
    @mroxide.official ปีที่แล้ว +1

    *Прикольно получилось*

  • @Golden_f1
    @Golden_f1 2 ปีที่แล้ว

    Видео очень хорошее,узнал много чего нового,спасибо) очень надеюсь что ты будешь учить делать файтинг:)

  • @onlyrock1351
    @onlyrock1351 2 ปีที่แล้ว

    Вот это доброе утро😳

  • @By_neo
    @By_neo 2 ปีที่แล้ว +1

    Ролик хороший, но хотелось бы добавить, я сам начал делать еще год назад по популярным видеоурокам зарубежного автора, идея моей игры не майнкрафт но игра в воксельном стиле, поэтому примерно на средине я отвалился от автора и ушел в собственное написание движка. Что хочу заметить, старайтесь использовать и хранить воксели в Dictionary списках по uint ключу, это во много раз ускорит обращение к вокселю по координатам и упростит работу алгоритму поиска, вектор в данном случае будет лишним для хранения плавающих значений которые здесь не исользуються, а вот преобразование получаемой позиции в uint ключ "битовые операции" это уже правильно, к тому же не создавайте массивы формата 16х255х16 как имеет чанк, этот массив будет иметь так же и пустые блоки которые для обработки не нужны, но при этом занимают память в ОЗУ, Dictionary здесь лучшее решение.

    • @By_neo
      @By_neo 2 ปีที่แล้ว

      Ну и второй момент, это mesh, здесь могу добавить только что старайтесь сразу сделать greedy mesh так как это: 1. увеличивает фпс и снижает нагрузку на устройство в 70%, 2. экономит кучу системной памяти, ведь в простом алгоритме отбраковки на каждый "квадратик" приходиться по 4 вершины и по 2 треугольника, если более по простому то на один полноценный куб висящий в воздухе приходиться 24 вершины место 8-ми как должно. Поэтому советую изучить материал Mikola Lysenko который уже реализовал подобное, даже есть исходники на github от других людей которые реализовали правильную uv развёртку. У меня игра после данной оптимизации стала потреблять раза так в 2.5 меньше ОЗУ чем это было до оптимизации. Ну и перерасчёты стали быстрее

    • @EmeraldPowder
      @EmeraldPowder  2 ปีที่แล้ว +1

      Спасибо за советы! Да, я там уже в одной из следующих серий записал как откажусь от 3д массива, чтобы всё это ускорить. И на greedy meshing натыкался, но его пока не реализовал, спсибо за наводку

  • @nickwilde5876
    @nickwilde5876 2 ปีที่แล้ว

    о теперь хоть знаю как сделать не плоский уровень, для какой нибудь 2д игры))

  • @ekakoob
    @ekakoob 2 ปีที่แล้ว

    Класс, копатель онлайн своими руками!

  • @uegamedev
    @uegamedev ปีที่แล้ว

    Очень жду такое видео под Unreal Engine :D

  • @nekokira5596
    @nekokira5596 2 ปีที่แล้ว

    Спасибо! очень интересно тебя слушать

  • @sejkeeee
    @sejkeeee 2 ปีที่แล้ว

    Лучший !

  • @communis_ranae
    @communis_ranae 2 ปีที่แล้ว

    Жду следующие видео!!!!

  • @hatiko8227
    @hatiko8227 2 ปีที่แล้ว +2

    Очень буду ждать от автора видео по DOTS, когда выйдет релиз.

  • @seregaplay1770
    @seregaplay1770 2 ปีที่แล้ว

    Комментарий для продвижения канала

  • @Frendyd
    @Frendyd 2 ปีที่แล้ว

    Удачи тебе (:

  • @akstis4183
    @akstis4183 2 ปีที่แล้ว

    Ваааааай, классно

  • @katarsis6541
    @katarsis6541 2 ปีที่แล้ว

    Великолепно

  • @ГринГриныч-б9ь
    @ГринГриныч-б9ь 2 ปีที่แล้ว

    Класс, побольше бы физики рассмотреть в уроках)

  • @slahgamers1868
    @slahgamers1868 2 ปีที่แล้ว

    Удачи

  • @СергейТищенко-к6з
    @СергейТищенко-к6з 2 ปีที่แล้ว

    Просто лучший

  • @JT_MoroLor
    @JT_MoroLor 2 ปีที่แล้ว +1

    продолжай снимать про Майнкрафт

  • @rdragon587
    @rdragon587 2 ปีที่แล้ว

    Cool )

  • @daniiljurjin9325
    @daniiljurjin9325 2 ปีที่แล้ว

    Top👍

  • @dareskull6541
    @dareskull6541 2 ปีที่แล้ว

    Весь ролик идёт разговор об оптимизации, но упускается несколько интересных вещей. В юнити (как и в других движках) есть статик батчинг и гпу инстансинг. Работает это крайне просто - геймобджекты с одинаковой моделью (идентичным мешем/геометрией) и с одинаковым материалом (который кстати может использоваться на все сотни блоков майна с одной текстурой и ещё рендериться с двух сторон) объединяются в один объект что значительно сокращает дроу коллы.
    Сам в этом убедился когда создавал дизайн локации. Сначала сделал несколько модулей и из нескольких сотен собрал одну локацию. После завершения прототипа в юнити собрал всю локацию одним мешем в блендере. И сюрприз сюрприз - вызовов отрисовки было ровно столько же, сколько и с несколькими сотнями модулей при статик батчинге. Так что смело предположу что все танцы с бубнами про генерацию меша ради оптимизации не сильно нужны.
    Для справки: статик батчинг работает на объектах с включённой галочкой "Static" и за счёт галочки объекты не смогут двигаться. ГПУ инстансинг работает только на динамических моделях. Советую ознакомиться с этими фичами если слышите о них впервые

    • @mdlka_
      @mdlka_ 2 ปีที่แล้ว +1

      А как же ломание/добавление блоков? Получится ли при включенном "Static" менять меш? Также с сохранением, как сохранить и потом загрузить то, что понастроил игрок?
      Static было бы удобно использовать, если бы окружение нельзя было изменить

    • @dareskull6541
      @dareskull6541 2 ปีที่แล้ว

      @@mdlka_ Так а в чём проблема? Ты просто наплодишь лярды кубов, а потом будешь их отключать/удалять. Отдельными геймобджектами. И статик остаётся, и изменяемость будет. Типа оно тупо все кубики на сцене слепит в один большой меш и всё

    • @mdlka_
      @mdlka_ 2 ปีที่แล้ว

      @@dareskull6541 При таком решении билд раздуется до слишком большого размера, тк будет хранить очень большой меш. + как с этим работать в юнити? Если я правильно тебя понял, то сцена будет забита кубами. И скорее всего такая сцена будет жутко лагать
      Вообще много проблем с этим решением придет, но это первое, что в голову пришло

    • @EmeraldPowder
      @EmeraldPowder  2 ปีที่แล้ว +1

      Статик батчинг можно использовать, но на десятках тысяч кубов он всё равно будет плохо работать. Из-за того что там более общий и сложный алгоритм, + геймобджекты никуда не денутся, которые не самые лёгкие свами по себе. Плюс там мы не сможем отдельные грани отключать, и убирать целые кубы которые внутри чанка находятся. Кстати выключать/включать статик обьекты насколько я помню не очень хорошая практика, там тогда же весь батч будет перевычисляться, но вместо неё для игр с автогенерацией можно использовать StaticBatchingUtility, чтобы вызвать статик батчинг в рантайме, а не для заготовленной сцены
      Ну а gpu instancing конечно тоже поможет, но опять же, 100к кубов отрендерить будет намного сложнее чем сгенерировать один полигон и отрисовать его. Но интересно как-нибудь устроить сравнение фпс на разных размерах миров с таким подходом

    • @dareskull6541
      @dareskull6541 2 ปีที่แล้ว

      @@EmeraldPowder Ещё вспомнил из оптимизации такие техники как HLODы (известны в анриле, но в юнити особо никто ничего не снимал) и импостеры. Ну так, чисто если охота будет заморочиться и сравнить все варианты оптимизации)
      И спасибо за ответ. Я как 3д дизайнер не особо шарю, чисто что по туторам нашёл, так что спасибо за пояснение

  • @Z_Z.t
    @Z_Z.t 2 ปีที่แล้ว

    прекрасно, а теперь это всё надо запаковать в compute shader шобы летало и не отвлекало процессор

  • @globalacademyorigina1
    @globalacademyorigina1 7 หลายเดือนก่อน

    Убедительная просьба к автору в начале видео указывать версии ПО которым он пользуется. Это облегчит работу подписчикам а вам их прибавит)

  • @Roman_SBB
    @Roman_SBB 2 ปีที่แล้ว

    Больше спасибо за урок

  • @communism8037
    @communism8037 2 ปีที่แล้ว +3

    Если у каждого чанка свой массив blocks и свой renderer, то получается на границе чанков таки будут отрисовываться лишние грани, так как блоки рядом будут находиться уже в другом чанке, т.е. вне массива blocks.

    • @evilvirraZzz
      @evilvirraZzz 2 ปีที่แล้ว +2

      Думаю, он пофиксит это :)

    • @exLeute
      @exLeute 2 ปีที่แล้ว +1

      17:42

    • @communism8037
      @communism8037 2 ปีที่แล้ว +2

      @@exLeute и в правду, фраза "целый бок состоит из полигонов" во время первого просмотра была воспринята неверно. Получается мой комментарий почти не имеет смысла :I

    • @EmeraldPowder
      @EmeraldPowder  2 ปีที่แล้ว +2

      Да, всё правильно, на границах чанках с полигонами есть проблемы. Но во 2 части в том числе и это пофиксим :)

    • @dansts6114
      @dansts6114 ปีที่แล้ว

      ​@@EmeraldPowderвопрос, у меня юнити пишет что на строке if(Blocks[x,y,z] == 0) return;
      Оно выходит за пределы массива.

  • @SchlachtschiffBismarck-gf3fi
    @SchlachtschiffBismarck-gf3fi 2 ปีที่แล้ว +3

    для оптимизации сделай статический и динамический батчинг а ещё сделай Occlusion Culling. Так же желательно сделать свою систему света как в майнкрафте (она реализована при помощи гаммы и цветов)

    • @DarkDGG
      @DarkDGG 2 ปีที่แล้ว

      Оклюжин кулинг работает только на статике, а её тут нет от слова совсем!

    • @SchlachtschiffBismarck-gf3fi
      @SchlachtschiffBismarck-gf3fi 2 ปีที่แล้ว

      @@DarkDGG так а в чём проблема сделать все блоки и чанки статичными?)

    • @SchlachtschiffBismarck-gf3fi
      @SchlachtschiffBismarck-gf3fi 2 ปีที่แล้ว

      @@DarkDGG так же само и про статический батчинг он тоже только на статичное работает

    • @DarkDGG
      @DarkDGG 2 ปีที่แล้ว +4

      @@SchlachtschiffBismarck-gf3fi в том, что нужна вероятно ГЕНЕРАЦИЯ и наверное, такая же возможность СЛОМАТЬ ВСЁ, что угодно - как в майнкрафте.

  • @Gorila-el8yw
    @Gorila-el8yw ปีที่แล้ว

    чуствую будто делаю игру без движка)

  • @VinDust
    @VinDust 2 ปีที่แล้ว +15

    А будет часть с переписыванием кода на GPU? И стоит ли вообще переделывать генерацию такого меша под GPU?

    • @communism8037
      @communism8037 2 ปีที่แล้ว +1

      присоединяюсь

  • @АлександрПухов-ь4э
    @АлександрПухов-ь4э 2 ปีที่แล้ว

    очень понравилось повествование

  • @requiem_for_a_dream5463
    @requiem_for_a_dream5463 2 ปีที่แล้ว +1

    Спасибо за видео. Интересно как систему строительства реализуешь