ROBLOX — Beam указатель, путеводная нить

Автор: | 13 августа, 2023
Поделиться...

Базовое применение Beam это указать игроку куда идти дальше. Но это далеко не единственное применение данного инструмента.

Но сегодня у меня спросили как именно сделать данный указатель, поэтому это мы и разберём.

Итак, сперва теория. Beam — это луч соединяющий две точки. В случае усложнения, это кривая Безье с дополнительными параметрами: кривизны, размеров и другими…

Получаем, что нам нужно определиться с этими точками.

  • центр персонажа (торс)
  • центр локации (место резервирования территории)

Далее нам нужна.. текстура со стрелкой. (Забегая вперёд скажу что нам нужна стрелка вниз.)

Подойдёт любая.

Переходим к коду. Мы уже определились где будут находиться точки. А значит, к нашим объектам (цель и игрок) надо прицепить аттачи и создать на их основе луч. И вот тут сразу нюанс это не нужно видеть всем игрокам, а значит это будет происходить на стороне клиента и как следствие это будет LocalScript. Т.к. у нас это тестовое задание, то поместим этот скрипт в StarterCharacterScripts. Он должен будет у нас запуститься, только когда появится персонаж. А чтобы не задавать кучу условий и отслеживаний событий мы его и помещаем в зону скриптов, что выполняется только при появлении перса.

local Players = game:GetService("Players")	-- сервис работоы с игроками
local player = Players.LocalPlayer			-- получение игрока на клиенте
local character = player.Character			-- получение персонажа игрока

local attach0 = character:WaitForChild("HumanoidRootPart")	-- место выхода луча
local attach1 = game.Workspace.Target		-- указатель цели

local att0 = Instance.new("Attachment")		-- создаём сами аттачи
local att1 = Instance.new("Attachment")

att0.Parent = attach0						-- привязываем аттачи к нашим объектам
att1.Parent = attach1

local beam = Instance.new("Beam")			-- создаём луч
beam.Attachment0 = att0
beam.Attachment1 = att1

beam.Texture = "rbxassetid://2557513411"	-- задаём текстуру луча
beam.TextureMode = Enum.TextureMode.Wrap	-- вариант текстурирования
beam.TextureSpeed = 2						-- скорость движения стрелок
beam.Transparency = NumberSequence.new{
	NumberSequenceKeypoint.new(0, 0),
	NumberSequenceKeypoint.new(1, 0)
} 											-- прозрачность текстуры
beam.Brightness = 10						-- свечение текстуры
beam.LightEmission = 0						-- смешение с цветами окружения
beam.LightInfluence = 0 					-- смешение с освещением вокруг
beam.FaceCamera = false						-- не зависитеть от от угла зрения перса
beam.Segments = 1							-- повторений текстур в в блоке

beam.Enabled = true							-- активируем луч
beam.Parent = att0							-- указываем расположение

Вот и результат:

Что бы создать ещё одну стрелку, нам просто нужно создать ещё один аттач цели и копию готового луча.

local Players = game:GetService("Players")	-- сервис работоы с игроками
local player = Players.LocalPlayer			-- получение игрока на клиенте
local character = player.Character			-- получение персонажа игрока

local attach0 = character:WaitForChild("HumanoidRootPart")	-- место выхода луча
local attach1 = game.Workspace.Target		-- указатель цели

local att0 = Instance.new("Attachment")		-- создаём сами аттачи
local att1 = Instance.new("Attachment")

att0.Parent = attach0						-- привязываем аттачи к нашим объектам
att1.Parent = attach1

local beam = Instance.new("Beam")			-- создаём луч
beam.Attachment0 = att0
beam.Attachment1 = att1

beam.Texture = "rbxassetid://2557513411"	-- задаём текстуру луча
beam.TextureMode = Enum.TextureMode.Wrap	-- вариант текстурирования
beam.TextureSpeed = 2						-- скорость движения стрелок
beam.Transparency = NumberSequence.new{
	NumberSequenceKeypoint.new(0, 0),
	NumberSequenceKeypoint.new(1, 0)
} 											-- прозрачность текстуры
beam.Brightness = 10						-- свечение текстуры
beam.LightEmission = 0						-- смешение с цветами окружения
beam.LightInfluence = 0 					-- смешение с освещением вокруг
beam.FaceCamera = false						-- не зависитеть от от угла зрения перса
beam.Segments = 1							-- повторений текстур в в блоке

beam.Enabled = true							-- активируем луч
beam.Parent = att0							-- указываем расположение

------------------------------------------------------------------------------------
-- второй луч
local attach2 = game.Workspace.Target2		-- указатель цели
local att2 = Instance.new("Attachment")
att2.Parent = attach2

local beam2 = beam:Clone()					-- клон готового
beam2.Attachment1 = att2					-- замена цели

beam2.Enabled = true							-- активируем луч
beam2.Parent = att0							-- указываем расположение


Поделиться...

ROBLOX — Beam указатель, путеводная нить: 1 комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *