August 17, 2024

Делаю систему крови или же возможность персонажа "красиво" умирать

В роблоксе есть такая игра которая называется 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 отличается от других объектов?

  1. Динамические эффекты:
    • ParticleEmitter создается для генерации частиц, которые могут двигаться, изменять цвет, форму, размер, скорость и т. д. Это делает его идеальным для создания таких эффектов, как дым, огонь, искры, вода, кровь, магия и другие динамические визуальные эффекты.
    • Другие объекты, такие как Part, Decal или Mesh, обычно статичны или малоизменяемы. Например, Part — это базовый строительный блок, представляющий собой 3D-объект, который обычно используется для создания физической геометрии, тогда как Decal используется для наложения изображений на поверхность Part.
  2. Создание множества объектов за секунды:
    • ParticleEmitter способен создавать сотни или даже тысячи частиц в секунду, что позволяет создавать эффекты с большим количеством мелких объектов (например, капли дождя или искры). Он оптимизирован для того, чтобы создавать и управлять большим количеством объектов одновременно.
    • Если бы мы пытались создать аналогичный эффект с помощью множества отдельных Part объектов, это быстро бы стало неэффективным и привело к снижению производительности игры, так как Roblox плохо справляется с обработкой большого количества физических объектов.
  3. Анимация и настройки:
    • ParticleEmitter предоставляет множество настроек для анимации частиц, таких как скорость, вращение, жизненный цикл, размеры и цвета частиц. Это позволяет создать очень гибкие и разнообразные эффекты.
    • В других объектах, таких как Part или Mesh, такие настройки гораздо более ограничены или отсутствуют. Например, вы можете изменить размер и цвет Part, но вам придется вручную программировать анимации, перемещение и изменение этих параметров, что намного сложнее и менее эффективно, чем использование системы частиц.
  4. Эффективность и оптимизация:
    • ParticleEmitter оптимизирован для работы с большими объемами данных, касающихся частиц, и для создания визуальных эффектов без чрезмерной нагрузки на систему. Он включает встроенные функции для автоматического удаления частиц по окончании их жизненного цикла.
    • Другие объекты, такие как Part, могут увеличивать нагрузку на систему, если их использовать для моделирования большого количества движущихся объектов. Например, если бы вы создавали кровь с помощью отдельных Part, их пришлось бы удалять вручную или через систему Debris, что требует дополнительных вычислительных ресурсов.

Почему используем именно ParticleEmitter?

В контексте создания эффекта кровотечения, использование ParticleEmitter — это лучший выбор по нескольким причинам:

  1. Реалистичные капли крови: ParticleEmitter позволяет легко создать эффект капель крови, падающих с персонажа. Эти капли могут двигаться под действием гравитации, изменять направление и исчезать через определенное время. Все эти параметры легко настраиваются с помощью свойств ParticleEmitter, таких как Lifetime, Speed, Rotation, Color и т. д.
  2. Массовая генерация частиц: С помощью ParticleEmitter вы можете создавать множество частиц (капель крови) в секунду без значительной нагрузки на производительность игры. Это позволяет сделать эффект кровотечения более интенсивным и реалистичным, чем если бы вы вручную создавали Part объекты для каждой капли.
  3. Автоматическое управление частицами: ParticleEmitter автоматически управляет созданием, анимацией и удалением частиц. Это упрощает код и освобождает вас от необходимости вручную отслеживать каждую каплю крови и удалять ее после окончания анимации.
  4. Гибкость в настройке: Вы можете настроить частички крови так, чтобы они выглядели именно так, как вам нужно. Например, вы можете настроить их размер, скорость появления, время жизни, направление движения и другие параметры. Это дает вам больше контроля над визуальными эффектами.

Заключение:

Использование 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 также при кровотечение у нашего персонажа пропадет нога и он станет "одноногим" всем пока.