ROBLOX — путеводная стрелка домой — cursor to home

Автор: | 20 января, 2020
Поделиться...

Думаете так просто найти по этой ерунде информацию? Как бы не так. Искал варианты Raycast и прочие векторные фигни… И вот… Чисто случайно наткнулся на Beam в документации:

https://developer.roblox.com/en-us/api-reference/class/Beam

Осталось малость — забахать из этого целе-указующий перст.

Согласно описанию: нужны две точки на рабочем пространстве. Не страшно: одна будет бошка гуманоида (head присутствует как в новых моделях, так и в старых), вторая — стартовая позиция.

Берём скрипты из документации и допиливаем. Ах да, это обычный скрипт, который так же размещается в Workspace.

-- стрелки к месту старта
shared["BeamToStart"]=function(pos)
		
	local v1
	local v2

	v1=Vector3.new(pos.Position.X,pos.Position.Y+2,pos.Position.Z)
-- print(v1.Magnitude)
	if v1.Magnitude < shared.SizeGround/2 then
		wait(1)
		return -- если возле деревни, то указатель нам не нужен
	end	
	 
	-- create attachments
	local att0 = Instance.new("Attachment")
	local att1 = Instance.new("Attachment")
	
	-- parent to terrain (can be part instead)
	att0.Parent = workspace.Terrain
	att1.Parent = workspace.Terrain
	 
	v2=v1-v1.Unit*1 -- ограничиваем длинну в 10 юнитов в направлении куда
	att0.Position = v1
	att1.Position = v2
	
	-- create beam
	local beam = Instance.new("Beam")
	beam.Attachment0 = att0
	beam.Attachment1 = att1
	
	-- appearance properties
	beam.Color = ColorSequence.new({ -- a color sequence shifting from white to blue
			ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 255, 255)),
			ColorSequenceKeypoint.new(1, Color3.fromRGB(0, 255, 255))
		}
	)
	beam.LightEmission = 1 -- use additive blending
	beam.LightInfluence = 1 -- beam not influenced by light
	beam.Texture = "rbxassetid://139707616" -- a built in sparkle texture
	beam.TextureMode = Enum.TextureMode.Wrap -- wrap so length can be set by TextureLength
	beam.TextureLength = 1 -- repeating texture is 1 stud long 
	beam.TextureSpeed = 0 -- slow texture speed 1
	beam.Transparency = NumberSequence.new({ -- beam fades out at the end
			NumberSequenceKeypoint.new(0, 0),
			NumberSequenceKeypoint.new(0.8, 0),
			NumberSequenceKeypoint.new(1, 1)
		}
	)
	beam.ZOffset = 0 -- render at the position of the beam without offset 
	 
	beam.FaceCamera = true -- beam is visible from every angle 
	beam.Segments = 5 -- default curve resolution  
	beam.Width0 = 2 -- starts small
	beam.Width1 = 1 -- ends big
	 
	-- parent beam
	beam.Enabled = true
	beam.Parent = att0
	wait() -- делаем паузу чтобы не зависало!
	beam.Enabled = false
end


-- Будем запускать привязав к игрокам - новым и после респавна
local Players = game:GetService("Players") 
local function onCharacterAdded(character)
	-- Give them sparkles on their head if they don't have them yet
	--if not character:FindFirstChild("Sparkles") then
		local part
		while true do
			part = character:WaitForChild("Head")
			shared.BeamToStart(part)
		end
	--end
end
 
local function onPlayerAdded(player)
	-- Check if they already spawned in
	if player.Character then
		onCharacterAdded(player.Character)
	end
	-- Listen for the player (re)spawning 
	player.CharacterAdded:Connect(onCharacterAdded)
end
 
-- Iterate over each player already connected
-- to the game using a generic for-loop
for i, player in pairs(Players:GetPlayers()) do
	onPlayerAdded(player)
end
-- Listen for newly connected players
Players.PlayerAdded:Connect(onPlayerAdded)

Отходим от деревни и наслаждаемся картинкой:

И как всегда, увидеть это в работе можно в игре:

https://www.roblox.com/games/4587789852/NecroWorld


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

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

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