Делаю систему крови или же возможность персонажа "красиво" умирать
В роблоксе есть такая игра которая называется bloodtide мне кажется это идеал кровавого боевика там система крови сделано идеально сегодня мы попробуем сделать что то похожее ,серия будет состоять из 3 уроков где ха 3 урока мы во первых улучшим свои навыки скриптинга и создания анимаций и также навыки создания графики
Заходим в Roblox studio и создаём Baseplate
Для начала мы просто создаём part кирпич
С этого начинаются почти все уроки)
Теперь как всегда добавляем скрипт в наш part
На первой строке мы присваиваем переменной part ссылку на объект (кирпич),к которому прикреплён этот скрипт.Это важно для отслеживания касания
На второй строке это переменная флаг
Представьте что переменная флаг это как переключатель который может находится в двух состояниях: "включено или "выключено". В компьютере как правило в операционной системе переменной флаг присваиваивают либо 1 "включено" либо 0. "выключено" в микроконтроллерах испозует первый вариант но мы с вами сегодня будем пользоваться true и false переменная будет показывать идёт ли кровотечение true или нет false
На 4 строке Это функция которая отвечает за запуск кровотечения у персонажа.В качестве аргумента она принимает 'character',что является ссылкой на объект персонажа
На 5 строке: Проверяется,не идёт ли уже кровотечение.Если нет,продолжаем выполнение функции
На 6 строке: Устанавливаем флаг 'isBleeding в 'true',указывая что персонажа начал кровоточить
Переходим уже к более интересному
С помощью функции Instance new мы создаём объект класса ParticleEmitter но вы наверняка спросите почему именно этот тип объекта, почему не Part не Mesh или какой нибудь WedgePart а я скажу
ParticleEmitter — это особый объект в Roblox, который используется для создания и управления системами частиц. Он значительно отличается от других объектов, которые можно создать с помощью Instance.new, благодаря своей специфической роли в создании динамических визуальных эффектов.
Чем ParticleEmitter отличается от других объектов?
- Динамические эффекты:
ParticleEmitterсоздается для генерации частиц, которые могут двигаться, изменять цвет, форму, размер, скорость и т. д. Это делает его идеальным для создания таких эффектов, как дым, огонь, искры, вода, кровь, магия и другие динамические визуальные эффекты.- Другие объекты, такие как
Part,DecalилиMesh, обычно статичны или малоизменяемы. Например,Part— это базовый строительный блок, представляющий собой 3D-объект, который обычно используется для создания физической геометрии, тогда какDecalиспользуется для наложения изображений на поверхностьPart. - Создание множества объектов за секунды:
ParticleEmitterспособен создавать сотни или даже тысячи частиц в секунду, что позволяет создавать эффекты с большим количеством мелких объектов (например, капли дождя или искры). Он оптимизирован для того, чтобы создавать и управлять большим количеством объектов одновременно.- Если бы мы пытались создать аналогичный эффект с помощью множества отдельных
Partобъектов, это быстро бы стало неэффективным и привело к снижению производительности игры, так как Roblox плохо справляется с обработкой большого количества физических объектов. - Анимация и настройки:
ParticleEmitterпредоставляет множество настроек для анимации частиц, таких как скорость, вращение, жизненный цикл, размеры и цвета частиц. Это позволяет создать очень гибкие и разнообразные эффекты.- В других объектах, таких как
PartилиMesh, такие настройки гораздо более ограничены или отсутствуют. Например, вы можете изменить размер и цветPart, но вам придется вручную программировать анимации, перемещение и изменение этих параметров, что намного сложнее и менее эффективно, чем использование системы частиц. - Эффективность и оптимизация:
ParticleEmitterоптимизирован для работы с большими объемами данных, касающихся частиц, и для создания визуальных эффектов без чрезмерной нагрузки на систему. Он включает встроенные функции для автоматического удаления частиц по окончании их жизненного цикла.- Другие объекты, такие как
Part, могут увеличивать нагрузку на систему, если их использовать для моделирования большого количества движущихся объектов. Например, если бы вы создавали кровь с помощью отдельныхPart, их пришлось бы удалять вручную или через системуDebris, что требует дополнительных вычислительных ресурсов.
Почему используем именно ParticleEmitter?
В контексте создания эффекта кровотечения, использование ParticleEmitter — это лучший выбор по нескольким причинам:
- Реалистичные капли крови:
ParticleEmitterпозволяет легко создать эффект капель крови, падающих с персонажа. Эти капли могут двигаться под действием гравитации, изменять направление и исчезать через определенное время. Все эти параметры легко настраиваются с помощью свойствParticleEmitter, таких какLifetime,Speed,Rotation,Colorи т. д. - Массовая генерация частиц: С помощью
ParticleEmitterвы можете создавать множество частиц (капель крови) в секунду без значительной нагрузки на производительность игры. Это позволяет сделать эффект кровотечения более интенсивным и реалистичным, чем если бы вы вручную создавалиPartобъекты для каждой капли. - Автоматическое управление частицами:
ParticleEmitterавтоматически управляет созданием, анимацией и удалением частиц. Это упрощает код и освобождает вас от необходимости вручную отслеживать каждую каплю крови и удалять ее после окончания анимации. - Гибкость в настройке: Вы можете настроить частички крови так, чтобы они выглядели именно так, как вам нужно. Например, вы можете настроить их размер, скорость появления, время жизни, направление движения и другие параметры. Это дает вам больше контроля над визуальными эффектами.
Заключение:
Использование ParticleEmitter позволяет создать сложный визуальный эффект кровотечения с минимальными затратами времени и ресурсов. В отличие от других объектов в Roblox, которые более статичны или сложны в управлении, ParticleEmitter предназначен специально для создания динамических визуальных эффектов, таких как частицы крови, и это делает его идеальным инструментом для реализации такого рода механик в игре.
На 9 строке теперь мы делаем Texture: Устанавливаем текстуру частиц крови, используя ID текстуры (в данном случае, это ID текстуры крови) я долго не искал просто взял первую возможную вы же можете добавить свою или использовать мою.Rate: Задает скорость появления частиц (5 частиц в секунду).Lifetime: Устанавливает диапазон времени жизни частиц (от 1 до 2 секунд).Speed: Устанавливает скорость частиц (в данном случае от 2 до 4).Rotation и RotSpeed: Настройки вращения частиц.Color: Устанавливаем цвет частиц в темно-красный цвет.Size: Задает размер частиц (0.5).
local humanoid = character:FindFirstChild("Humanoid"): Эта строка находит объект Humanoid внутри персонажа. Humanoid отвечает за управление жизнью, движением и другими важными аспектами персонажа.Поиск ноги: Код пытается найти часть тела персонажа, которая будет использоваться для привязки эмиттера частиц (например, "Left Leg", "LeftLowerLeg" или "LeftFoot").Присоединение эмиттера: Если нога найдена, bloodEmitter привязывается к этой части тела.
local function leaveBloodTrail(): Эта функция отвечает за создание пятен крови на земле. Она работает в цикле while, создавая новые пятна, пока флаг isBleeding равен true.Создание части (Part): Создается новый объект Part, который будет использоваться как пятно крови на земле.
- Размер: Задается размер пятна крови.
Anchored: Делает часть неподвижной.CanCollide = false: Отключает возможность столкновения, чтобы другие объекты не сталкивались с пятном.- Цвет: Задается цвет пятна в темно-красный.
Позиционирование части: Проверяется, есть ли у персонажа PrimaryPart. Если есть, пятно позиционируется под персонажем, создавая эффект, будто кровь капает на землю.
Decal в Roblox — это объект, который позволяет накладывать изображения или текстуры на поверхности частей (Part). Это похоже на то, как наклейки наклеиваются на предметы в реальной жизни.
Как работает Decal:
- Размещение:
Decalприкрепляется к части (Part) и отображается на одной из ее поверхностей. Вы можете выбрать, на какую именно поверхность будет нанесена наклейка, используя свойствоFace(например,Enum.NormalId.Topдля верхней поверхности). - Текстура: Основное свойство
Decal— это его текстура. Это изображение, которое будет отображаться на выбранной поверхности. Текстура указывается через URL или ID ресурса в Roblox. В вашем коде используется ID текстуры крови (rbxassetid://13346855).
Зачем нужна Decal:
- Визуальный эффект:
Decalиспользуется для создания визуальных эффектов. В нашем случае, это кровавые пятна на земле. Вместо того чтобы просто окрашивать части в красный цвет, накладывается детализированная текстура крови, что делает эффект более реалистичным. - Добавление деталей:
Decalпозволяет добавить мелкие детали, такие как текстуры грязи, царапины, пятна крови и другие элементы, без необходимости вручную моделировать эти детали. Это значительно облегчает создание сложных визуальных эффектов.
Удаление части через некоторое время: Используется служба Debris, чтобы удалить пятно крови спустя 10 секунд, предотвращая захламление сцены.Уменьшение здоровья: Каждые полсекунды мы уменьшаем здоровья персонажа на 1 единицу чтобы создать эффект кровотечения и потерю крови.wait(0.5): Пауза перед созданием следующего пятна крови.
spawn(leaveBloodTrail): Эта функция запускает процесс создания пятен крови в отдельном потоке, позволяя другим процессам работать параллельно.
local function stopBleeding(): Эта функция останавливает кровотечение, устанавливая флаг isBleeding в false. Это предотвращает дальнейшее создание частиц и пятен крови.
local function onTouch(hit): Эта функция вызывается, когда что-то касается объекта (кирпича). Аргумент hit содержит объект, который касается кирпича.Определение персонажа: hit.Parent используется для определения персонажа, который коснулся кирпича.Поиск Humanoid: Если у персонажа есть объект Humanoid, это означает, что это персонаж игрока.Запуск кровотечения: Если Humanoid найден, вызывается функция startBleeding, и запускается процесс кровотечения.Подписка на событие смерти: Если персонаж умирает, срабатывает функция stopBleeding, которая останавливает кровотечение.
part.Touched:Connect(onTouch)
part.Touched:Connect(onTouch): Подписка на событиеTouched, которое вызывается при касании объектаpart. Когда кто-то касается кирпича, вызывается функцияonTouch.
Итог:
- Когда персонаж касается кирпича, запускается кровотечение.
- Частицы крови появляются из персонажа, и под ним создаются пятна крови на земле.
- Каждую полсекунды у персонажа уменьшается здоровье.
- Если персонаж умирает, кровотечение останавливается.
вот и все ребята можете посмотреть результат я считаю вполне неплохо для моего камбэка сегодня мы научились
1. Работа с Instance.new
Мы научились использовать функцию Instance.new для создания различных типов объектов в Roblox. Это основополагающий элемент в Roblox Studio для создания новых объектов в игровом мире, таких как частицы, детали, интерфейсы и многое другое.
2. Создание и настройка ParticleEmitter
- Создание частиц: Мы использовали
ParticleEmitterдля создания эффекта частиц, который позволяет добавить динамическое и визуально привлекательное поведение, например, капли крови. - Настройка свойств частиц: Мы научились настраивать параметры частиц, такие как
Texture,Rate,Lifetime,Speed,Color, иSize, чтобы добиться нужного визуального эффекта. Это помогает сделать эффекты более реалистичными и подходящими для конкретной задачи.
3. Создание и управление следами крови
- Использование
Partдля создания следов: Мы научились создавать простые части (Part) для имитации следов крови на земле. Это включает в себя установку размеров, цвета и текстуры пятен. - Добавление
Decalдля текстур: Мы использовалиDecal, чтобы наложить текстуру на части, что делает следы более реалистичными и детализированными.
4. Работа с событиями касания
- Обработка события
Touched: Мы научились использовать событиеTouchedдля определения, когда персонаж касается объекта (например, кирпича), чтобы инициировать определенные действия, такие как создание эффекта крови. - Определение персонажа: Мы проверяли, является ли объект, который коснулся кирпича, персонажем игрока, используя
FindFirstChild("Humanoid").
5. Создание функций для управления эффектами
- Функция
startBleeding: Мы создали функцию, которая запускает эффект кровотечения, создавая и настраивая частицы и следы крови. - Функция
stopBleeding: Мы также создали функцию для остановки кровотечения, что может быть полезно при излечении или смерти персонажа.
6. Оптимизация и управление ресурсами
- Использование
Debrisдля удаления объектов: Мы узнали, как использовать службуDebrisдля автоматического удаления объектов (например, пятен крови) спустя определенное время, чтобы избежать перегрузки игры лишними объектами. - Использование
spawn: Мы использовалиspawnдля запуска функции создания следов крови в отдельном потоке, что позволяет избежать блокировки основного потока исполнения кода и улучшить производительность.
7. Понимание Humanoid и здоровья
- Работа с
Humanoid: Мы научились взаимодействовать с компонентомHumanoidдля проверки состояния персонажа и обработки событий, связанных со здоровьем персонажа.
Заключение
Этот код дал нам хорошие примеры того, как можно комбинировать различные объекты и функции в Roblox для создания сложных визуальных эффектов и интерактивного поведения. Мы освоили основы работы с Instance.new, настройку частиц и текстур, обработку событий, а также методы для управления ресурсами и оптимизации производительности. Эти знания являются основой для создания более сложных игровых механик и эффектов в Roblox Studio.
на следующих уроках мы улучшим нашу систему крови и сделаем полноценный bloodtide где при стрельбе в игрока он начнет кровоточить и тд и так бонус для тех кто дочитал до конца можно сделать эффект "отрубания" ноги local character = hit.Parent local humanoid = character:FindFirstChild("Humanoid") if humanoid then — Попробуем найти левую и правую ногу local leftLeg = character:FindFirstChild("Left Leg") or character:FindFirstChild("LeftLowerLeg") or character:FindFirstChild("LeftFoot") local rightLeg = character:FindFirstChild("Right Leg") or character:FindFirstChild("RightLowerLeg") or character:FindFirstChild("RightFoot") — Удаляем левую ногу, если она найдена if leftLeg then leftLeg:Destroy() end также при кровотечение у нашего персонажа пропадет нога и он станет "одноногим" всем пока.