ROBLOX — #5 Делаем питомца

Автор: | 25 декабря, 2023
Поделиться...

На youtube полно уроков, но большинство из них либо устарели, либо не работают, либо забывают какую-нибудь маленькую деталь. В итоге полдня потрачено на то, чтобы найти рабочую версию, под текущий выпуск студии.

Декабрь 2023 года. Наткнулся на правильный вариант создания питомца на функции PivotTo. Он на видео ниже.

https://www.youtube.com/watch?v=c9xHoctPtQw

Старый вариант убирать не буду, он всё ещё рабочий.

Начнём с того, что создадим самого пэта. Для этого берём обычный кирпич. Добавляем ему SpecialMesh. Красим и добавляем материал. Из ToolBox перетаскиваем готовую рожицу из вкладки Images прямо на нашего Pet-а.

Снимаем галку Anchor — т.к. питомец должен передвигаться и галку Collisions, т.к. должен проходить сквозь препятствия. Добавляем BodyGyro отвечающий за направление взгляда и BodyPosition отвечающий за текущую позицию. В них выставляем значение «inf,inf,inf» (без кавычек) для параметров MaxTorque и MaxForce.

Ну и теперь пришла очередь скриптования. Добавляем в него script, переименовываем его в Follow и заносим в него код:

while true do -- выполнять до бесконечности
	wait() -- ждём чего-то
	local HumPR = script.Parent.Parent:WaitForChild("HumanoidRootPart") -- ищем подключившегося игрока
	local BodyPosition = script.Parent:WaitForChild("BodyPosition") -- сохраняем свою текущую позицию
	local BodyGyro =script.Parent:WaitForChild("BodyGyro") -- сохраняем своё текущее направление
	
	-- перемещаемся в направлении "за плечо игрока"
	BodyPosition.Position = HumPR.Position + HumPR.CFrame.lookVector*-2 + HumPR.CFrame.upVector*3 + HumPR.CFrame.rightVector*2
	-- и смотрим туда же куда и игрок
	BodyGyro.CFrame = HumPR.CFrame * CFrame.new(3,0,-3)
end

Т.к. использую сторонний код, то и расположение объектов будем использовать так же как и в нём. В ReplicatedStorage создаём папку PetLibrary и переносим туда нашего питомца.

Внимание! При этом питомец «исчезаем» с рабочего стола игры!

И нам нужен второй скрипт — для порождения самого питомца. В глобальной папке ServerScriptService создаём скрипт с именем PetOnEnter:

game.Players.PlayerAdded:Connect(function(Player) -- ожидаем подключения игрока
	Player.CharacterAdded:Connect(function(Character) -- ожидаем назначения ему модели
		wait(5) -- обычная пацза на 5 секунд
		local RS = game:GetService("ReplicatedStorage") -- будем обращаться к системному сервису
		local PetLibrary = RS:WaitForChild("PetLibrary") -- берём из него ссылку на нашу папку
		local PetClone = PetLibrary:WaitForChild("Pet") -- берём оттуда нашего пэта
		local Follow = PetClone:WaitForChild("Follow") -- создаём клон нашего пэта
		
		PetClone.Parent = Character -- запихиваем пэта в модель нашего игрока
--		Follow.Disable = false
		
		print (PetClone.Parent.Name) -- просто печатаем имя игрока с пэтом для отладки
		
	end)
end)

Должно в итоге выглядеть примерно так:

Можем запускать и посмотреть на результат. Через 5 секунд после старта появляется питомец и летит к нам. После чего болтается у нас за плечом.


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

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

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