14. Векторные операции. Раскладывание монеток по большой спирали.

Математические операции с векторами позволяют более гибко преобразовывать координаты точек. Часто применяется сложение векторов, этот процесс можно представить графически (рисунок 2):

Trulli
Рис.2 - Графическое представление сложения векторов.

Помимо сложения векторов, Lua позволяет перемножать векторы - тем самым перемножать элементы векторов, которые соответствуют общим осям (x,y,z).

14.1 Раскладывание монеток.

Добавьте модель Collectible Coin из Toolbox на наше рабочее пространство(Workspace) и переместите его в службу ReplicatedStorage меняя свойство Parent:

Для того, чтобы расположить монетки по широкой плоской спирали, необходимо добавить строчки кода в Script_stairs:


-- Создание папки для хранения монеток
local coinsFolder = Instance.new("Folder")
coinsFolder.Name = "Coins"
coinsFolder.Parent = workspace
local spawns = game.Workspace.SpiralParts
for _, spwn in pairs(spawns:GetChildren()) do --перебор пар из списка элементов SpiralParts
	--BasePart - класс родитель для класса Part
	if spwn:IsA('BasePart') then --является ли этот элемент потомком BasePart?
		local Coin = game.ReplicatedStorage['Collectible Coin']:Clone()
		Coin.Parent = coinsFolder -- помещаем его в Workspace (появляется на карте)
		Coin.Position = spwn.Position * Vector3.new(10,0,10) + Vector3.new(-100,3,-100)
	end
end
			

Обратите внимание, что координаты для монеток - это преобразовыванные координаты блоков из папки SpiralParts.

15. Конструирование с элементами моделирования физики и украшение собственных моделей. Создание модели змеепоезда.

Мы уже изучали элементы моделирования физики в пункте 6. Теперь пришло время познакомиться с шарнирами - BallSocketConstraint.

Шарниры - это механические соединения, которые позволяют деталям двигаться относительно друг друга, например: сустав, карданный вал или место крепления фотоаппарата в штативе.

15.1 Создание змеепоезда.

Вначале необходимо создать объект хранения частей змеепоезда. Для этого создадите объект класса Model, нажав кнопку "+" справо от службы workspace. После этого добавьте в Model объект Part c габаритами 20x1x43 и уменьшите его плотность до 0.1 (рисунок 3).

Trulli
Рис.3 - Окно properties позволяющие менять физические свойства объекта.

Украсьте его декалью "SNAKE FACE AHH!" из изображений Toolbox. И добавьте рядом с декалью элементы моделирования физики согласно рисунку 4.

Trulli
Рис.4 - Окно explorer с объектами змеепоезда.

На рисунке видно, что змеепоезд состоит из пяти одинаковых частей соединенных шарнирами через присоединения. И только первая часть имеет объект AlignPosition, который тянет за собой все части змеепоезда.

В пункте 6. Подробно описано, как сделать движение платформы. Теперь необходимо соединить платформы между собой с помощью шарниров, настроив необходимые присоединения в объектах BallSocketConstraint (рисунок 5)

Trulli
Рис.5 - Окно explorer и properties с объектами BallSocketConstraint.

Чтобы заставить змеепоезд двигаться, необходимо менять свойство AlignPosition с помощью скрипта. Добавьте строчки кода в Script_stairs:


local spawn_time = 5
snek_pos = game.Workspace.Model.Part_a
while true do --до тех пор пока 1==1? - всегда повторяться
	wait(spawn_time) -- ждём указанное время
	for _, spwn in pairs(spawns:GetChildren()) do --перебор пар из списка вхождения Spawn
		if spwn:IsA('BasePart') then --является ли этот элемент потомком BasePart?
			snek_pos.AlignPosition.Position = spwn.Position * Vector3.new(10,0,10) + Vector3.new(-100,0,-100)
			task.wait(1.5)
		end
	end
end
			

В данном случае координаты направления движения совпадают с местоположением монет. С помощью скрипта мы можем создать любой маршрут движения змеепоезда

Trulli
Рис.6 - Фрагмент змеепоезда.