Close
    Search Search

    Tutorial: guia especializado para scripts

    Tutorial: guia especializado para scripts

    Receber! Se você está lendo este tutorial, então você deve ter lido os tutoriais para iniciantes, iniciantes, intermediários e avançados de script. Agora você deve ter todas as habilidades para fazer um jogo totalmente funcional. Este tutorial cobrirá alguns conceitos aleatórios e não fundamentais que você pode usar a qualquer momento.


    Conteúdo

    Marcação()

    Marcação() é uma função que encontra a hora Unix. Se você não sabe o que isso significa, é o número de segundos decorridos desde a época do Unix, que é 1º de janeiro de 1970.



    Digamos que eu queira saber quanto tempo se passou desde que uma GUI foi clicada. Insira um ScreenGui, um TextButton no ScreenGui e um script local no TextButton.

    local startTime = tick () script.Parent.Activated: Connect (function () local serverTime = tick () - startTime print (serverTime) end)

    Agora, tomaria o tempo Unix atual e, em seguida, subtrairia o tempo de início dele.


    Interpolação linear

    Esta é uma alternativa útil à interpolação, permitindo animar suavemente uma parte de um ponto a outro. Para fazer isso, você pode simplesmente usar a função Lerp () no CFrame da parte.

    GoalPart local = game.Workspace.Part2 script.Parent.CFrame: Lerp (GoalPart.CFrame, 0.5)

    Na função Lerp (x, y), x é o CFrame em que você deseja que a parte termine e o parâmetro y é o decimal ou fração do caminho que você deseja que a parte percorra. Então, por exemplo, quando y = 1, a peça se moverá até o final do CFrame. Quando y = 0, a peça não se moveria. Portanto, neste caso, a peça se moveria na metade do caminho para a Parte2.

    UDim2

    UDim2 é o equivalente Gui do Vector3. Em vez de lidar com um espaço tridimensional, ele usa um espaço 3-D. Em vez de assumir três valores, ele assume quatro: Escala X, Deslocamento X, Escala Y e Deslocamento Y.

    Escala

    A escala é a parte da tela inteira. Portanto, quando a escala X no tamanho da GUI é definida como 1, a GUI ocupa toda a tela horizontalmente. Quando a escala X é definida como 0, a GUI não pode ser vista.


    Compensar

    O deslocamento é o número adicional de pixels. Portanto, quando o tamanho é definido como (0,300,0,300), a GUI será de 300 X 300 pixels. Observe que você deve evitar o uso de Offset, se possível, porque a GUI ficará distorcida dependendo da tela.

    Recomenda-se que, ao trabalhar com o ScreenGuis, SEMPRE use a escala em vez de deslocamento. Isso ocorre porque dispositivos diferentes têm tamanhos de tela diferentes, de modo que as IUs seriam diferentes em telas diferentes.

    Manipulação de câmera

    Alterar a visualização da câmera é útil para várias coisas. Por exemplo, você pode querer que a câmera olhe para uma determinada ferramenta quando o jogador estiver em uma loja em um jogo de simulador. Portanto, abra StarterPlayer> StarterPlayerScripts e insira um script local.


    local Camera = game.Workspace.CurrentCamera local FocusPart = game.Workspace.FocusPart local CameraCFrame = game.Workspace.CameraPart wait (0.01) Camera.CameraType = Enum.CameraType.Fixed Camera.CFrame = CFrame.new (Vector3.new (CameraCFrame .Position)) Camera.Focus = FocusPart

    Da terceira à última linha, o CameraType foi definido como fixo, portanto, permaneceria em um ponto. Então, o local seria a posição da CameraPart. Finalmente, definir o foco faria a câmera olhar fixamente para CameraPart.

    UserInputService

    UserInputService é um serviço usado principalmente para disparar comandos sempre que uma determinada tecla é pressionada. Neste tutorial, você aprenderá a fazer uma GUI de inventário aparecer sempre que a tecla E for pressionada.

    Insira um ScreenGui e um script local no StarterGui. Projete a GUI para o que for melhor para você.


    InputBegan

    InputBegan é um evento que dispara sempre que um jogador tenta fazer uma entrada no jogo. Isso se refere não apenas a digitar uma tecla, mas também a clicar com o botão esquerdo ou direito. Portanto, no script local, insira o seguinte código:

    local UserInputService = game: GetService ("UserInputService") UserInputService.InputBegan: Connect (function (input, gameProcessedEvent) end

    Agora, você pode ver que existem dois parâmetros para o evento InputBegan: input e gameProcessedEvent. A entrada refere-se à forma como o jogador inseriu os dados.

    gameProcessedEvent

    gameProcessedEvent é um booleano que é verdadeiro se não houver outro motivo para a entrada do usuário. Por exemplo, você provavelmente não gostaria que este código fosse disparado se o usuário digitasse E no bate-papo. Você não gostaria que o código fosse disparado se alguém clicasse em uma GUI. Em ambas as ocasiões, gameProcessedEvent seria definido como verdadeiro. Portanto, coloque uma instrução if que só dispararia se gameProcessedEvent fosse falso.

    local UserInputService = game: GetService ("UserInputService") UserInputService.InputBegan: Connect (function (input, gameProcessedEvent) if gameProcessedEvent == false then end end)

    Agora, tudo o que resta fazer é verificar se a entrada foi o pressionamento de uma tecla E. Em seguida, use-o para habilitar a GUI.


    local UserInputService = game: GetService ("UserInputService") UserInputService.InputBegan: Connect (function (input, gameProcessedEvent) if gameProcessedEvent == false then if input.Keycode == Enum.KeyCode.E then game.StarterGui.ScreenGui.Enabled = true fim fim fim)

    KeyCode refere-se à tecla que foi pressionada. Certifique-se de usar Enum; valores de string não funcionarão aqui.

    InputEnded

    InputEnded é um evento semelhante, mas dispara quando a entrada termina. Portanto, ele é disparado quando um usuário solta o botão ou a tecla do mouse.

    UserInputService = game: GetService ("UserInputService") UserInputService.InputEnded: Connect (function (input, gameProcessedEvent) if gameProcessedEvent == false then if input.Keycode == Enum.KeyCode.E then game.StarterGui.ScreenGui.Enabled = true fim fim fim)

    As propriedades "habilitadas"

    As propriedades habilitadas são propriedades booleanas definidas como verdadeiras se o dispositivo do usuário tiver um determinado recurso. Aqui estão eles:

    • AccelerometerEnabled: se o dispositivo tiver um acelerômetro
    • GamepadEnabled: se o dispositivo tiver um gamepad
    • GyroscopeEnabled: se o dispositivo tiver um giroscópio
    • KeyboardEnabled: se o dispositivo tiver um teclado
    • MouseEnabled: se o dispositivo tiver um mouse
    • TouchEnabled: se o dispositivo tiver um touchpad
    • VREnabled: se o usuário estiver usando um fone de ouvido VR

    Os eventos "Touch"

    Esses eventos são disparados sempre que o usuário faz um determinado movimento usando o dedo em um dispositivo móvel.

    • TouchEnded: quando um jogador solta o dedo
    • TouchLongPress: quando um jogador mantém pressionado na tela
    • TouchMoved: quando um jogador move o dedo
    • TouchPan: quando um jogador arrasta o dedo
    • TouchPinch: quando um jogador aperta dois dedos
    • TouchRotate: quando um jogador gira os dedos
    • TouchStarted: quando um jogador coloca o dedo na tela
    • TouchSwipe: quando um jogador passa o dedo
    • TouchTap: quando um jogador toca com o dedo
    • TouchTapInWorld: Quando um jogador toca no mundo 3-D.

    Ferramentas de jogador

    Você também pode querer aprender sobre as ferramentas do jogador. Essas são ferramentas que você pode ver na barra de atalho do inventário na parte inferior da tela.

    Para fazer isso, primeiro projete sua ferramenta com quantos componentes desejar.

    Em seguida, encontre a parte principal pela qual deseja que o jogador segure a ferramenta e renomeie-a para "Manipular". Observe que você DEVE usar o nome exato; Roblox não aceita nenhuma variação.

    Em seguida, solde todas as peças usando restrições de solda. Você pode fazer isso destacando as peças no Explorer e, em seguida, indo para Modelo> Restrições> Soldar.

    Insira uma ferramenta na área de trabalho e coloque todas as peças dentro dela. Você notará, no entanto, que a peça pode não ser colocada em sua mão da maneira que você deseja. Portanto, instale um plug-in do editor de aperto de ferramenta, que você pode encontrar na Biblioteca Roblox, e use-o para mover e girar a ferramenta tanto quanto você precisa. Se você quiser que a ferramenta seja dada ao jogador no início do jogo, coloque-a no StarterPack. Caso contrário, coloque-o no ServerStorage.

    MarketPlaceService

    MarketPlaceService é um serviço usado para controlar passagens de jogo para sinos e apitos extras no jogo. Digamos que eu queira que os usuários recebam uma espada se tiverem o gamepass.

    Criando a ferramenta

    Crie a ferramenta como você fez na seção anterior e coloque-a no ServerStorage. Você pode encontrar um modelo de espada na caixa de ferramentas.

    Criando o Gamepass

    Publique seu jogo na Roblox, caso ainda não tenha feito isso. Não precisa ser público, mas pode se você quiser. Em seguida, vá para a página do jogo no site, vá para a guia Loja abaixo da descrição e adicione um novo gamepass. Dê a ele um nome e insira uma imagem de 150 x 150 pixels.

    Se você deseja alterar o preço, clique no ícone de engrenagem e selecione "Configurar". Então, você pode alterar o preço. Observe que, para usuários não premium, o Roblox ficará com 90% do Robux ganho com passagens de jogo. Para usuários premium, eles levarão 30%.

    PromptGamePassPurchase ()

    PromtGamePassPurchase () é uma função que pergunta ao jogador se ele deseja comprar um gamepass. Existem dois parâmetros: o player e o AssetId do gamepass.

    local MarketplaceService = jogo: GetService ("MarketplaceService") local plr = game.Players.LocalPlayer MarketplaceService: PromptGamePassPurchase (plr, 9382042)

    Claro, você precisará substituir o número pelo ID do gamepass.

    PromptGamePassPurchaseFinished

    Este é um evento que dispara quando o jogador compra o gamepass ou descarta o pop-up. Tem três parâmetros: o jogador, o ID do passe de jogo e se o jogador comprou ou não o passe de jogo.

    MarketplaceService local = jogo: GetService ("MarketplaceService") MarketplaceService.PromptGamePassPurchasedFinished: Conectar (função (plr, ID, wasPurchased) se wasPurchased == true então se ID == 3920472 então Espada local = jogo.ServerStorage.Sword: Espada Clone () .Parent = plr.Backpack end end end)

    A primeira instrução if verifica se o jogador comprou ou não o gamepass. O segundo verifica se o passe de jogo que o jogador comprou era o que pretendia dar uma espada ao jogador.

    Animação

    Uma animação é uma forma de fazer um modelo se mover suavemente para fazer uma dança, uma onda ou o que quer que seja.

    Criando a Animação

    Para fazer isso, vá para a guia Plugins e selecione "Build Rig". Dependendo do tipo de corpo que você deseja animar, selecione um rig que funcione melhor para sua animação. Um modelo R15 é um modelo com 15 partes do corpo e um modelo R6 é um modelo que tem 6 partes. Escolha quantas juntas você deseja usar. O equipamento deve aparecer em seu espaço de trabalho.

    Em seguida, abra o editor de animação e use a ferramenta Selecionar para selecionar o rig. Com o editor de animação, você pode girar o rig em certos quadros-chave como quiser.

    Quando terminar, clique no nome da animação e clique em "Exportar". Parenteado para o rig na janela do Explorer, você deve ver um objeto com o nome da animação e um ícone de quadrado azul. Clique com o botão direito e escolha “Exportar para Roblox”. Será um trunfo no seu inventário de jogadores. Observe que as animações R6 não funcionam com modelos R16 e vice-versa.

    Em seguida, copie e cole o AssetId.

    Fazendo o script da animação

    Agora é hora de animar o personagem. Insira um script no personagem que deseja animar e, em seguida, um objeto de animação no script. Insira o AssetId da animação na propriedade AnimationId do objeto de animação. Insira o seguinte no script:

    animação local = script: WaitForChild ("Animation") local humanoid = script.Parent: WaitForChild ("Humanoid") local LoadedAnimation = humanoid: LoadAnimation (animação) LoadedAnimation: Play ()

    Novamente, WaitForChild cede até que o objeto exista e seja carregado. LoadAnimation prepara a animação a ser reproduzida. Finalmente, Play () fará com que a animação seja reproduzida.

    TeleportService

    Às vezes você descobre que, em projetos maiores, o mundo fica um pouco grande para o seu próprio bem. Portanto, você pode ter vários locais separados no jogo. Se você tem dificuldade para entender o que isso significa, é como os servidores Pro Towers no Tower of Hell. Ainda é o mesmo jogo, mas está em um lugar diferente.

    Para fazer isso, certifique-se de que seu jogo seja publicado. Pode ser privado.

    Em seguida, vá para a guia Exibir e abra a janela Game Explorer. Em seguida, passe o mouse sobre "Lugares" e clique no sinal de mais para criar um lugar. Clique com o botão direito na guia local no Game Explorer para copiar o PlaceId.

    Vamos fazer uma plataforma de teletransporte que transporta as pessoas entre os lugares. Insira uma parte no espaço de trabalho e um script dentro.

    local TeleportService = game: GetService ("TeleportService") local debounce = false script.Parent.Touched: Connect (function (hit) if debounce == false then debounce = true wait (2) end end)

    Até agora, tudo é bastante autoexplicativo. Certifique-se de usar um debounce. Caso contrário, o servidor do usuário irá parar de responder.

    Portanto, configure uma variável local para obter o objeto player. Em seguida, use a função Teleport () para inserir o script. O primeiro parâmetro é o PlaceId e o segundo parâmetro é o objeto player.

    local TeleportService = game: GetService ("TeleportService") local debounce = false script.Parent.Touched: Connect (function (hit) if debounce == false then debounce = true local plr = game.Players: GetPlayerFromCharacter (hit.Parent) TeleportService : Teleport (29403734, plr) end end)

    Observe que isso não funcionará dentro do Roblox Studio. Se você deseja testar, vá para um servidor ativo.

    regiões

    Uma região é um espaço tridimensional no mundo Roblox. Vamos tentar encontrar peças em um espaço específico. Crie uma peça e dimensione-a de forma que cubra toda a região. Em seguida, tente encontrar as coordenadas do canto esquerdo inferior da peça. Faça o mesmo com o canto superior direito. Em outras palavras, encontre os valores mínimo e máximo de X, Y e Z da peça. Agora você pode excluir uma parte. Insira este script no espaço de trabalho:

    local reg = Region3.new (Vector3.new (minX, minY, minZ), Vector3.new (maxX, maxY, MaxZ))

    Substitua os seis marcadores de posição por coordenadas. A variável reg criará uma nova região com essas coordenadas.

    Tópicos

    O que é um tópico?

    Um thread é uma maneira de um script executar mais de um trecho de código por vez. Portanto, se eu quisesse fazer dois loops while rodarem ao mesmo tempo com intervalos diferentes, dispararia apenas o loop superior.

    enquanto true do print (1) wait (2) end enquanto true do --Não funcionará. imprimir (2) esperar (2) terminar

    Isso ocorre porque o código ficará preso para sempre no primeiro loop while.

    Um tópico permitirá que o mesmo script execute os dois ao mesmo tempo.

    Função Spawn ()

    A função Spawn permite que você crie um novo tópico.

    spawn (function () while true do print (1) wait (1) end end) enquanto true do print (2) wait (2) end

    Aqui, o código irá disparar os dois loops while ao mesmo tempo.

    Função Delay ()

    A função Delay funciona da mesma maneira que Spawn funciona, só que criará um atraso antes de criar o thread.

    delay (5, function () while true do print (1) wait (1) end end) enquanto true do print (2) wait (2) end

    Aqui, o script disparará o segundo loop while, espere 5 segundos e depois disparará o primeiro loop while.

    Corrotinas

    As corrotinas são basicamente formas de criar novos threads, apenas com mais funções.

    local ctine = coroutine.create (function () while true do print (1) end end)

    Observe que o thread não será executado sem uma função de retomada posteriormente.

    coroutine.resume (ctine)

    Você pode usar a função de rendimento para pausar a co-rotina.

    coroutine.yield (ctine) wait (1) coroutine.resume (ctine)

    Aqui, o script pausará a co-rotina e a retomará em 1 segundo.

    Adicione um comentário do Tutorial: guia especializado para scripts
    Comentário enviado com sucesso! Vamos analisá-lo nas próximas horas.