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)