Как ты собираешься сделать камеру RTS / городскую камеру в ROBLOX Studio? - PullRequest
0 голосов
/ 03 января 2019

Итак, я хочу сделать несколько Минимальных ПО для некоторых идей игр, которые я имею в виду для ROBLOX, большинство из них - игры RTS / City Building. Я пытался несколько раз, чтобы получить правильную камеру, но я просто не могу это сделать. Я не могу заставить камеру двигаться с WASD. Кто-нибудь может помочь?

Я попытался прикрепить камеру к части и сделать игрока невидимым на другой невидимой платформе над картой. Никто из них не работал так, как камера работает в таких играх, как Banished или Halo Wars (как я хочу, чтобы камера работала)

1 Ответ

0 голосов
/ 03 января 2019

Heyo!

Если вы новичок в написании сценариев камеры, я бы порекомендовал проверить Roblox Developer Hub для некоторых довольно хороших учебников: https://developer.roblox.com/articles/Camera-manipulation

По умолчанию Roblox предоставляетдовольно сложный сценарий камеры, который следует за персонажем, когда игрок появляется.Вы можете увидеть эти сценарии при запуске игры в Studio и заглянуть в Solution Explorer в Players > [YourPlayerName] > PlayerScripts > PlayerModule > CameraModule.Здесь вы увидите все различные типы камер, которые Roblox уже разработал для вас.

Но если вы хотите поэкспериментировать самостоятельно, вы можете попробовать сделать копию этих сценариев или сделать свою собственную.просто создав новый LocalScript в StarterPlayer > StarterPlayerScripts с именем CameraScript.

Поскольку вы создаете игру в стиле RTS, такую ​​как Starcraft или Halo Wars, я бы порекомендовал сделать простую камеру, зависшую в воздухе, указывающую на землю под углом 60 градусов и движущуюся вдоль оси Xс вводом с клавиатуры WS и вдоль оси Z с вводом с клавиатуры AD.

Вот простой пример, который поможет вам начать работу:

  1. Убедитесь, что флажок Players.CharacterAutoLoads снят.
  2. Создание LocalScript в StarterPlayerScripts с именем CameraScript
  3. Вставьте следующий скрипт в CameraScript.

local cam = game.Workspace.CurrentCamera

-- place the camera high in the air, looking down at the ground
local startingPos = Vector3.new(0, 30, 0)
local downwardLookAngle =  CFrame.Angles(-math.rad(60), 0, 0)
cam.CFrame = CFrame.new(startingPos) * downwardLookAngle

-- create a function that moves the camera around
local moveDir = Vector3.new(0, 0, 0) -- we'll use this vector to control our movement
local moveSpeed = 0.5
spawn(function()
    while true do
        -- animate the camera movement
        local c = game.Workspace.CurrentCamera.CFrame
        game.Workspace.CurrentCamera.CFrame = CFrame.new(c.Position) * CFrame.new(moveDir) * downwardLookAngle
        wait(0.01)
    end
end)

-- create a function to handle keyboard inputs
local function onKeyPress(actionName, userInputState, inputObject)
    -- when a key is pressed, modify our moveDir vector so our camera moves

    -- W key input
    if actionName == "moveCameraForward" then
        if userInputState == Enum.UserInputState.Begin then
            moveDir = Vector3.new(moveDir.X, moveDir.Y, -moveSpeed)
        elseif userInputState == Enum.UserInputState.End then
            moveDir = Vector3.new(moveDir.X, moveDir.Y, 0)
        end

    -- A key input
    elseif actionName == "moveCameraLeft" then
        if userInputState == Enum.UserInputState.Begin then
            moveDir = Vector3.new(-moveSpeed, moveDir.Y, moveDir.Z)
        elseif userInputState == Enum.UserInputState.End then
            moveDir = Vector3.new(0, moveDir.Y, moveDir.Z)
        end

    -- S key input
    elseif actionName == "moveCameraBackward" then
        if userInputState == Enum.UserInputState.Begin then
            moveDir = Vector3.new(moveDir.X, moveDir.Y, moveSpeed)
        elseif userInputState == Enum.UserInputState.End then
            moveDir = Vector3.new(moveDir.X, moveDir.Y, 0)
        end

    -- D key input
    elseif actionName == "moveCameraRight" then
        if userInputState == Enum.UserInputState.Begin then
            moveDir = Vector3.new(moveSpeed, moveDir.Y, moveDir.Z)
        elseif userInputState == Enum.UserInputState.End then
            moveDir = Vector3.new(0, moveDir.Y, moveDir.Z)
        end
    end
end

-- listen for keyboard input that moves the camera
game.ContextActionService:BindAction("moveCameraForward",  onKeyPress, false, Enum.KeyCode.W)
game.ContextActionService:BindAction("moveCameraLeft",     onKeyPress, false, Enum.KeyCode.A)
game.ContextActionService:BindAction("moveCameraBackward", onKeyPress, false, Enum.KeyCode.S)
game.ContextActionService:BindAction("moveCameraRight",    onKeyPress, false, Enum.KeyCode.D)

Этот скриптесть некоторые проблемы, если вы в конечном итоге нажмете W + S или A + D одновременно, но этого должно быть достаточно, чтобы начать работу.Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...