Paint holes unity что это
В прошлый раз я реализовал грид-карту, используя двумерные массивы, TextMesh объекты и Debug.DrawLine. Сегодня я продолжаю свои эксперименты в Unity, и покажу новую реализацию с использованием Tilemap.
Сетка - это отличный инструмент, который может быть использован как для дебага, так и для игровых… Сетка, созданная при помощи TextMesh и Debug.DrawLineНе стоит воспринимать всё ниже написанное, как туториал - я новичок в Unity. Цель данных постов - замотивировать в первую очередь самого себя на изучение материала, и провести новые эксперименты =)
Для данного проекта я использую кастомное разрешение 1024х512 (2:1) - оно хорошо подходит для стандартного размера камеры.
При помощи великой программы paint, y я создал три прекрасных спрайта, которые буду использовать далее в проекте.
Закидываем их все в Assets/Sprites.
Выставим координаты камеры на x = 0, y = 0, z - пусть остаётся по-умолчанию.
Создадим новый объект Tilemap, используя меню в окне иерархии.
Мы можем поменять высоту и ширину тайлов через окно инспектора (Scale), однако для данного проекта оставим значения по-умолчанию: высота и ширина равны 1.
Создаём новый слой Tilemap и выбираем его.
Не забываем добавить в Tilemap компонент Tilemap Collider 2D.
Создаём новую палитру LevelPalette и сохраняем её в Assets/Palettes.
Данный кусок статьи не обязателен - новые тайлы можно создать и путем перетаскивания спрайта в палитру. Однако, я решил добавить это сюда - ведь всё может пригодиться в жизни =)
В Assets/Scripts создаём новый скрипт под именем CustomTile.
Как можно увидеть ниже, его единственный функционал - создание нового меню. При помощи данного иснтрументы можно добавлять различные методы и параметры в созданный нами кастомный тайл.
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Tilemaps; // Создаём новый пункт меню для CustomTile [CreateAssetMenu(fileName = "new CustomTile", menuName = "Tiles/CustomTile")] public class CustomTile : Tile < // Оставляем конструктор пустым - сегодня он нам не пригодится public CustomTile() < >>Теперь мы можем создавать новые тайлы из меню Assets.
Создадим три новых тайла в Assets/Tiles, и назовём их Grass, Water, Wall.
Для того, чтобы завершить создание кастомных тайлов - нужно просто выбрать спрайт для каждого из них.
После того, как спрайты выбраны, можно перетащить созданные тайлы в палитру.
Если вы воспользовались созданием кастомного тайла, то ваши тайлы уже находятся в палитре.
Если же нет, то веделяем спрайты grass, wall и water, и перетаскиваем их в ранее созданную палитру, и сохраняем тайлы в Assets/Tiles под именами Grass, Water, Wall.
An article by mgear 12 CommentsShare this:
Related Posts
About the Author:
12 Comments + Add Comment
What about doing the opposite?
I mean, painting texture on a completely transparent object?
Make the mask initially black, and paint with white color.
I have assigned shader to multiple objects . when i edit one object all other objects also get erased..
may be thats sound silly I am a new to unity. please help
I think it happens because if you place the same script on multiple objects and you paint one object, other objects will also register the raycast hit as true and will erase from that same position where it hits on the other object..
so should modify the script and move it to camera..(and then paint on the raycast hit target only)
or for a quick test, in the current script should check when the raycast is hitting, that is the hit target same as this object..
Vector2 pixelUV = hit.textureCoord;
pixelUV.x *=tex.width;
pixelUV.y *=tex.height;
tex.SetPixel((int)pixelUV.x,(int)pixelUV.y, Color.black);
tex.Apply();
HI, How do we know if object is completely Erased or not.?
Every time you paint, could check that if pixel is not painted color, then increase pixel counter.. (until pixel counter equals total all pixels)
Or after each click, go through all pixels and see which ones are painted and which ones not.
Would be faster to use SetPixels32() array (and check from the array), instead of the invidual SetPixel()/GetPixel()
Unfortunately no time at the moment..
Try first yourself, post results/question in Unity forum, so others can help also 🙂
ok thanks i will try 🙂
Leave a comment
Recent posts
- Run Unity Cloud Build based on Github Commit message using Github Actions
- Old School Scrolling Text with Shaders, RenderTexture
- Use custom Editor fonts
- Unity Asset Store MegaBundle (October 2021)
- [GreaseMonkey] Better Pixel Art viewer for itch.io
- Draw New Unity Logo using Surface Shader (+Default Cube)
- Shader Effects Test
- Checking ArcGIS Maps SDK Unity plugin (Beta)
- Boat Attack URP Water: Add Underwater surface flip
- Add Middle Mouse Button support into Asset Store Main Banner (GreaseMonkey script)
- Unity Forums Auto Select Current SubForum in Search (GreaseMonkey script)
- Compress WebGL build manually from command line (brotli)
Connect
Recent Comments
@unitycoder_com
Subscribe to Blog via Email
Tag Cloud
These materials are not sponsored by or affiliated with Unity Technologies or its affiliates. “Unity” is a trademark or registered trademark of Unity Technologies or its affiliates in the U.S. and elsewhere.
Читайте также:
- Запуск программы невозможен так как на компьютере отсутствует gdpfile dll
- Программа для блокировки приложений на андроид
- Обязательное поле bnosn subj не заполнено 1с
- Микросхема в которой хранятся программы биос тестирования пк загрузки ос драйверы устройств
- Программа для редактирования метаданных файла