Используйте библиотеку CFrame и члены объекта для управления значением CFrame. Например:
CFrame.new()
Создает новый CFrame, матрица которого установлена в единичную матрицу. Вы можете установить позицию в CFrame, передав 3 необработанных значения X, Y, Z или значение Vector3.
CFrame.new(Vector3.new(0, 5, 0) == CFrame.new(0, 5, 0)
Существует также возможность поворота в направлении вектора.
CFrame.new(Vector3.new(0, 5, 0), CFrame.new(0, 2, 0))
Используя функцию CFrame.Angles, вы можете создавать углы Эйлера для поворота CFrame.
CFrame.new() * CFrame.Angles(math.rad(20), 0, 0)
Обратите внимание, что при использовании углов Эйлера углы представляются в радианах, поэтому для преобразования радианов в градусы я использовал функцию math.rad в Lua. Есть также члены значений CFrame, так что вы из CFrame можете получить его вращения.
CFrame.new():toEulerAnglesXYZ()
Существуют также такие свойства, как «p» для позиции и «lookVector» для вектора, на который указывает CFrame.
CFrame.new().p
CFrame.new().lookVector
Доступ к самой матрице можно получить с помощью компонентов.
CFrame.new():components()
Также значения CFrame могут быть изменены с использованием координат объекта и мира.
CFrame.new():toObjectSpace(CFrame.new()) -- a tad pointless
Вы также можете применять арифметические операции к CFrames (и CFrames / Vector3s друг к другу)
CFrame.new() + CFrame.new(0, 2, 0)
Это всего лишь некоторая начальная информация, которая находится у меня в голове, из-за этого я не могу гарантировать точность этой информации. Проверьте ROBLOX Wiki для получения дополнительной информации.