{}const=>[]async()letfn</>var
Lua開発

Roblox Luaスタート:オブジェクトを動かし、プレイヤーに反応する最初のスクリプト🕹️

ゼロからRoblox StudioのLuauを理解しましょう。3つの作業スクリプトを書きます。正弦波に沿ったオブジェクトの動き、プレイヤーのタッチに対する反応、アニメーションと色の変更を含むコンボスクリプトです。水なし、ミームと構文チートシート付き。ゲーム開発を試したいけれど、どこから手をつけていいかわからない人には最適です。

К

Kodik

著者

3分で読める

「ただキューブを動かしたかっただけなのに、結局200行のゲームを書いてしまった」 — Roblox Studio を開いたすべてのユーザー

そもそも、なぜLuaがRobloxに必要なのでしょうか?

さて、詳しく見ていきましょう。あなたはおそらく、何百万人もの人が他のプレイヤーが作ったゲームをプレイするプラットフォーム、Robloxについて聞いたことがあるでしょう。そして、この魔法の背後にいるのは Luau —これは、Robloxに合わせて調整されたLuaのフォークです。高速、シンプル、タイプ付き(まあ、ほぼ)。

すでにJS、Python、またはその他の言語でコーディングしている場合、Luaは疑わしいほどシンプルに思えるでしょう。ブロックには {} がなく、行の終わりには ; がありません。localfunctionendだけで、さあ始めましょう。

事実: Lua の配列は 0 ではなく 1 から始まります。はい、私たちもショックです。ありがとうを言わないでください。

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

ステップ0:Roblox Studioを開く

  1. Roblox Studioをダウンロードする

  2. 新しいプロジェクトを作成 → 選択 Baseplate (床のある空っぽの世界)

  3. 3Dシーンが表示されます。左側には Explorer (オブジェクトツリー)、右側に Properties

以上。あなたはゲーム開発者です。LinkedInを更新できます。

ステップ1:オブジェクトをステージに投げる

上部のメニューをクリックします Part → 灰色のレンガがステージに現れます。これが私たちの実験対象です。

順番に名前を変更します。

  • B Explorer Partを見つけます

  • 右クリック→ RenameMovingBlock を書きます

色を変更することができます PropertiesBrickColor. 純粋に雰囲気のため。

ステップ2:最初のスクリプト — オブジェクトを移動する

ここからが面白いところです。エクスプローラーでMovingBlock を右クリックします → Insert ObjectScript.

コードエディターが開きます。デフォルトの print("Hello world!") を削除して、次のように記述します。

local block = script.Parent  -- это наш MovingBlocklocal startPos = block.Position  -- запоминаем стартовую позицию

while true do
    for i = 0, 10, 0.1 do
        block.Position = startPos + Vector3.new(math.sin(i) * 5, 0, 0)
        task.wait(0.03)
    endend

ここで起こっていること:

  • script.Parentは、スクリプト(当社のブロック)が内部にあるオブジェクトです

  • Vector3.new(x, y, z) — 3D空間の座標

  • math.sin(i) * 5 — ブロックは 5 ユニットの振幅で正弦波に沿って前後に揺れます

  • task.wait(0.03) — フレーム間のポーズ(≈30 FPSの動き)

クリック Play (上の緑のボタン)そして…キューブが動き出しました!振り子のように前後に動きます。美しい。

おめでとうございます。あなたは最初のゲームスクリプトを書きました。 これは、「ゲームを作りたい」と考えている人々の90%以上がすでに行っていることです。

ステップ3:プレイヤーに反応する - 「私のキューブに触らないで!」

今度は、プレイヤーがブロックに触れたときにブロックが反応するようにします。スクリプトの内容を以下に置き換えます。

local block = script.Parent
local startPos = block.Position
local isRunning = false

-- Функция: блок убегает вверх при касанииlocal function onTouch(otherPart)
    -- Проверяем, что нас коснулся именно игрок (у него есть Humanoid)
    local humanoid = otherPart.Parent:FindFirstChild("Humanoid")

    if humanoid and not isRunning then
        isRunning = true

        -- Блок подпрыгивает
        for i = 0, 3, 0.1 do
            block.Position = startPos + Vector3.new(0, math.sin(i) * 8, 0)
            task.wait(0.02)
        end

        -- Возвращается на место
        block.Position = startPos

        -- Кулдаун 1 секунда
        task.wait(1)
        isRunning = false
    endend

-- Подписываемся на событие касания
block.Touched:Connect(onTouch)

分析:

  • Touched — オブジェクトと物理的に接触したときにトリガーされるイベント

  • :Connect(функция) — イベントのサブスクリプション(こんにちは、オブザーバーパターン!)

  • FindFirstChild("Humanoid") — 当たったのは偶然のレンガではなく、プレイヤーであることを確認します

  • isRunning — デバウンスフラグ。アニメーションが連続して100回起動しないようにするためのものです。

クリック Play、キャラクターのブロックに近づいて、それをタッチするとジャンプします。まるでキュウリに驚いた猫のように。

ステップ4:コンボ—動き+反応

そして、最終ボスです。ブロックを作成します。このブロックは自ら動き、プレイヤーに反応します。色が変わり、膨らみます。

local block = script.Parent
local startPos = block.Position
local originalColor = block.BrickColor
local isReacting = false

-- Движение блока (в отдельном потоке)task.spawn(function()
    while true do
        for i = 0, 10, 0.1 do
            if not isReacting then
                block.Position = startPos + Vector3.new(
                    math.sin(i) * 5, 0, math.cos(i) * 5
                )
            end
            task.wait(0.03)
        end
    endend)

-- Реакция на касание
block.Touched:Connect(function(otherPart)
    local humanoid = otherPart.Parent:FindFirstChild("Humanoid")

    if humanoid and not isReacting then
        isReacting = true

        -- Меняем цвет на случайный
        block.BrickColor = BrickColor.Random()
        block.Size = block.Size + Vector3.new(1, 1, 1)

        task.wait(0.5)

        -- Возвращаем как было
        block.BrickColor = originalColor
        block.Size = block.Size - Vector3.new(1, 1, 1)

        task.wait(0.5)
        isReacting = false
    endend)

print("🎮 Script is running! Try touching the block.")

新着情報:

  • task.spawn() — 非同期で関数を起動します(Lua のみで goroutine として)

  • ブロックは円を描くように動きます。X軸に沿ってsin、Z軸に沿ってcos — 円形の軌道

  • ブロックに触れると、ブロックの色がランダムに変わり、「膨らみ」ます

  • print()はメッセージを表示します Output ( StudioのView → Output )

これで、円を描くように飛び回り、タッチすると色が点滅してプレイヤーをトリするブロックができました。これは、基本的に「キューブをキャッチ」というミニゲームです。

クイックチートシート

コンセプト

変数

local x = 42

機能

local function greet(name) return "Hi, " .. name end

条件

if x > 0 then ... elseif x == 0 then ... else ... end

サイクル

for i = 1, 10 do ... end

テーブル(配列)

local arr = {1, 2, 3} — 1からのインデックス!

表(オブジェクト)

local obj = {name = "Block", hp = 100}

イベント

object.Event:Connect(function() end)

待機

task.wait(1) — 1秒間のポーズ

非同期

task.spawn(function() ... end)

次に何を学びますか?

あなたは最初のスクリプトを書きました。しかし、これはほんのはじまりです。

  • RemoteEvents — クライアントとサーバー間の通信(はい、Roblox にはクライアントサーバーアーキテクチャがあります!)

  • DataStoreService — プレイヤーの進捗状況を保存

  • TweenService — 手動サイクルなしのスムーズなアニメーション

  • UI — ScreenGui を使用したインターフェース

  • モジュール - ModuleScript 純粋なアーキテクチャ用

📱 プログラミングスキルをレベルアップしたいですか?

このテーマに興味を持たれ、読むだけでなく、 実際にコーディングする — アプリを試してみよう コディックこれは、プログラミングを実践を通じて学ぶためのプラットフォームです。短いレッスン、アプリ内で直接確認できるタスク、そしてわかりやすい説明が特徴です。地下鉄で、列に並んでいる間、または就寝前に、基本を磨いたり、新しい言語を習得したりするのに最適です。

そして、私たちの テレグラムチャンネル — 開発者向けのプログラミングに関する投稿、タスク分析、チートシート、ミームが定期的に公開されています。コンピューターの前に座る時間がないときでも、素材を繰り返して自分自身を調整しておくのに最適な方法です。


ゲームデブで幸運を祈ります! そして、すべてのAAAゲームは、誰かがスクリプトで蹴ったキューブから始まったことを忘れないでください。 🎮

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要