Загрузка данных


local ContextActionService = game:GetService("ContextActionService")
local Players = game:GetService("Players")

-- Переменные для игрока, камеры, мыши.
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera	
local mouse = player:GetMouse()

-- Переменные настройки управления
-- Заданная скорость перемещения корабля.
local PLAYER_SPEED = 70000
-- Клавиша, отвечающая за перемещение вперёд.
local FORWARD_KEY = Enum.KeyCode.W

-- Создаём вектор, в направлении которого будет двигаться персонаж
-- Модель движется по собственной оси Z со скоростью PLAYER_SPEED
-- Знак “-” означает движение в обратном направлении, изменить, если изначально 
-- Mesh смотрит в другую сторону
local forwardForceVector = Vector3.new(0,0,-PLAYER_SPEED)

-- Функция движения, которую вызываем при нажатии на клавишу движения
local function onMove(actionName, inputState)
	if inputState == Enum.UserInputState.Begin then
		-- Если игрок нажал на клавишу - передаём вектор движения в объект "Векторная Сила"
		player.Character.HumanoidRootPart.VectorForce.Force = forwardForceVector
	elseif inputState == Enum.UserInputState.End then
		-- Если игрок отпустил клавишу - передаём нулевой вектор в объект "Векторная Сила"
		player.Character.HumanoidRootPart.VectorForce.Force = Vector3.new(0,0,0)
	end
end

-- Функция-реакция на курсор мыши или касание
local function onAim()
	-- Проверка наличия персонажа
	if player.Character then
		-- Переменная для хранения корневой детали гуманоида
		local rootPart = player.Character:FindFirstChild("HumanoidRootPart")
		-- Создаём вектор с координатами курсора на плоскости и высотой на уровне корабля
		local mouseLocation = Vector3.new(mouse.Hit.X, rootPart.Position.Y, mouse.Hit.Z)
		rootPart.CFrame = CFrame.new(rootPart.Position, mouseLocation)
		-- Поворот CFrame, если начальный объект и Mesh смотрят в другую сторону
		-- Например, понадобилось развернуть на 180 градусов в сторону.
		rootPart.CFrame *= CFrame.Angles(0, math.rad(180), 0)	
	end
end

-- Связываем ввод и функции:
-- Реакция на движение курсора - вызов функции onAim
ContextActionService:BindAction("Aim", onAim, false, Enum.UserInputType.MouseMovement)
-- Реакция на клик левой кнопкой мыши - вызов функции onMove
ContextActionService:BindAction("Aim_and_Move", onMove, false, Enum.UserInputType.MouseButton1)
-- Реакция на нажатие клавиши ВПЕРЁД - вызов функции onMove
ContextActionService:BindAction("Move", onMove, false, FORWARD_KEY)