【ロブロックス制作】敵を倒して究極進化!レベルアップシステムの作り方完全ガイド(コード解説付き)

1. はじめに

誰もが一度は憧れる「レベルアップと進化」のシステム。

今回は、ただ数字が増えるだけじゃない!

  • 経験値バーが伸びる!
  • レベルで姿が変わる!
  • 攻撃力もスピードもアップする!

そんなワクワクする神機能の作り方を詳しく解説するぞ。


2. 準備するもの

まずは、進化させたいモデル(Level3Formなど)を ServerStorage の中に入れておこう。 名前を間違えると魔法が動かないから注意してね!


3. ステップ1:レベルメーターを作る(ScreenGui)

まずは画面に表示されるゲージの動きだ。StarterGui の中の LocalScript にこのコードを貼ろう。

💻 メーター更新のコード

local player = game.Players.LocalPlayer
local stats = player:WaitForChild("leaderstats", 10)
if not stats then print("leaderstatsが見つかりません!") return end

local exp = stats:WaitForChild("EXP")
local level = stats:WaitForChild("Level")

local screenGui = script.Parent
local bg = screenGui:WaitForChild("ExpBarBackground")
local bar = bg:WaitForChild("ExpBarInner")
local label = screenGui:WaitForChild("LevelLabel")

local function updateGui()
	label.Text = "Level: " .. level.Value

	-- ゲージを滑らかに伸ばす (100で満タン)
	local percent = math.clamp(exp.Value / 100, 0, 1)
	bar:TweenSize(UDim2.new(percent, 0, 1, 0), "Out", "Quad", 0.3, true)
end

exp.Changed:Connect(updateGui)
level.Changed:Connect(updateGui)
updateGui()

ポイント: TweenSize を使うことで、バーがアニメーションのように滑らかに動くよ!

4. ステップ2:敵を倒して経験値をゲット!(KillScript)

次は敵に付けるセンサーだ。敵の Humanoid の中に入れよう。

💻 敵を倒すコード

local humanoid = script.Parent
local enemyModel = humanoid:FindFirstAncestorOfClass("Model") 
local canDamage = true

for _, part in pairs(enemyModel:GetChildren()) do
	if part:IsA("BasePart") then
		part.Touched:Connect(function(hit)
			local player = game.Players:GetPlayerFromCharacter(hit.Parent)

			-- プレイヤーが触れた時だけダメージ!
			if humanoid.Health > 0 and player and canDamage then
				canDamage = false 
				
				local atkValue = player:FindFirstChild("AttackPower")
				local damage = atkValue and atkValue.Value or 10
				humanoid:TakeDamage(damage)

				-- HPが0になったら経験値をあげる
				if humanoid.Health <= 0 then
					local stats = player:FindFirstChild("leaderstats")
					if stats then
						stats.EXP.Value += 50
						if stats.EXP.Value >= 100 then
							stats.EXP.Value = 0
							stats.Level.Value += 1
						end
					end
					task.wait(0.2)
					enemyModel:Destroy() -- 敵をお掃除!
				end

				task.wait(1) -- 次の攻撃まで1秒待つ(無敵時間)
				canDamage = true 
			end
		end)
	end
end

5. ステップ3:究極進化の魔法(LevelSystem)

最後は、レベルに合わせて姿と強さを変える心臓部。 ServerScriptService に入れよう。

💻 進化の管理コード

local ServerStorage = game:GetService(“ServerStorage”)

— レベルごとの設定(ここを書き換えるだけで自由にカスタマイズできる!)
local LEVEL_SETTINGS = {
[2] = {model = nil, atk = 20, speed = 16},
[3] = {model = “Level3Form”, atk = 50, speed = 25},
[4] = {model = “Level4Form”, atk = 100, speed = 35},
}

game.Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new(“Folder”, player)
leaderstats.Name = “leaderstats”

local level = Instance.new("IntValue", leaderstats); level.Name = "Level"; level.Value = 1
local exp = Instance.new("IntValue", leaderstats);   exp.Name = "EXP";   exp.Value = 0
local atk = Instance.new("NumberValue", player);     atk.Name = "AttackPower"; atk.Value = 10

level.Changed:Connect(function(newLevel)
    local config = LEVEL_SETTINGS[newLevel]
    if not config then return end

    -- ステータスアップ!
    atk.Value = config.atk
    local char = player.Character
    if char then char:WaitForChild("Humanoid").WalkSpeed = config.speed end

    -- 姿を変身!
    if config.model then
        local original = ServerStorage:FindFirstChild(config.model)
        if original and char and char.PrimaryPart then
            local spawnPos = char.PrimaryPart.CFrame
            local newChar = original:Clone()
            newChar.Name = player.Name
            player.Character = newChar
            newChar.Parent = workspace
            newChar:SetPrimaryPartCFrame(spawnPos)
            char:Destroy()
        end
    end
end)

6. おわりに

これで、君のゲームにも「進化」という最強のシステムが導入されたぞ! 自分だけのオリジナル進化先を作って、友達を驚かせてみよう!

もし分からないことがあったら、YouTubeチャンネル [@Pasonko] のコメント欄で質問してね。 また次の記事で会おう!バイバーイ!

コメント

タイトルとURLをコピーしました