লাভা, চেকপয়েন্ট, মিলিয়ে যাওয়া একটা প্ল্যাটফর্ম আর শেষ দাগওয়ালা একটা বাধার কোর্স।
বিনামূল্যে45 মিনিট · শুরুর স্তর · Roblox Studio
1
ধাপ 1 / 10
একটা নতুন place বানাও
Roblox Studio খোলো আর সাইন ইন করো।
New Experience এ ক্লিক করো আর Baseplate টেমপ্লেটটা বেছে নাও।
এখন তোমার একটা সমতল ধূসর মেঝে আছে। তোমার কোর্স এর উপরেই দাঁড়াবে।
আরও বিস্তারিত
Roblox Studio Windows আর Mac-এর জন্য একটা বিনামূল্যের প্রোগ্রাম। এখনো ইনস্টল না থাকলে create.roblox.com থেকে ডাউনলোড করো আর তোমার Roblox অ্যাকাউন্ট দিয়ে সাইন ইন করো।
Baseplate টেমপ্লেটটা শুরুর স্ক্রিনের টেমপ্লেটের তালিকায় আছে। যেটায় একটা ফাঁকা ধূসর মেঝে দেখা যায়, সেটাই।
place-টা একটা ট্যাবে খোলে। ট্যাবের নাম হলো তোমার place-এর নাম।
Mac-এ এই গাইডে যেখানেই Ctrl লেখা আছে, সেখানে প্রতিবার Cmd কী ব্যবহার করো।
টিপ. File → Save to Roblox দিয়ে ঘন ঘন সেভ করো। Studio পুরোনো ভার্সন রেখে দেয়, তাই তুমি সবসময় ফিরে যেতে পারবে।
এই ধাপটা আমার জন্য কাজ করছে না
আগে এই তিনটা জিনিস দেখে নাও
প্রতিটা part আর স্ক্রিপ্টের নাম ঠিক গাইডের মতো, একই বড় হাতের আর ছোট হাতের অক্ষরসহ।
স্ক্রিপ্টটা ঠিক অবজেক্টের ভেতরে আছে। কোডের বাক্সের উপরের লেবেলটা দেখো।
Window মেনু থেকে Output উইন্ডো খোলো। লাল লেখা দেখায় কোন স্ক্রিপ্টে আর কোন লাইনে সমস্যা।
দুটো প্ল্যাটফর্মের মাঝে একটা নতুন Part যোগ করো। সেটা লাল করো, Material বদলে Neon করো, Anchored চালু করো আর নাম দাও Lava।
Explorer এ Lava এর উপর মাউস রাখো, + বোতামে ক্লিক করো আর Script বেছে নাও।
ওখানে আগে থেকে যে লাইনটা আছে সেটা মুছে ফেলো আর এই কোডটা পেস্ট করো।
Lava > Script
local lava = script.Parent
lava.Touched:Connect(function(hit)
local humanoid = hit.Parent:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = 0
end
end)
প্রতিটা অংশ কী করে
script.Parent হলো যে part এর ভেতরে স্ক্রিপ্টটা আছে সেটা। এখানে সেটা লাভা।
কিছু part টাকে ছুঁলেই Touched চলে। hit হলো যেটা ছুঁয়েছে সেটা, যেমন একটা পা।
hit.Parent হলো পুরো ক্যারেক্টার। এর মধ্যে Humanoid থাকলে সেটা একজন প্লেয়ার, তাই স্ক্রিপ্ট Health কে 0 করে দেয়।
আরও বিস্তারিত
Material হলো Properties-এর একটা তালিকা। ওটায় ক্লিক করে Neon বেছে নাও। Neon part-কে জ্বলজ্বলে করে।
Script যোগ করলে সেটা একটা নতুন ট্যাবে খোলে, তাতে এক লাইন কোড থাকে। কোডের ভেতরে ক্লিক করো, সব বাছাই করতে Ctrl+A চাপো আর তার উপরে পেস্ট করতে Ctrl+V।
তোমার place-এর নামের ট্যাবে ক্লিক করে নিজের জগতে ফিরে যাও।
টেস্ট করতে F5 চাপো আর লাভার মধ্যে হাঁটো। তোমার ক্যারেক্টার ভেঙে পড়ে আর শুরুর জায়গায় ফিরে আসে।
লাভাটা চওড়া আর সমতল বানাও, যেমন Size 12, 1, 6, আর প্ল্যাটফর্মগুলোর চেয়ে একটু নিচে রাখো, যাতে লাফ ফসকালে সেটার মধ্যে পড়ে।
এই ধাপটা আমার জন্য কাজ করছে না
আগে এই তিনটা জিনিস দেখে নাও
প্রতিটা part আর স্ক্রিপ্টের নাম ঠিক গাইডের মতো, একই বড় হাতের আর ছোট হাতের অক্ষরসহ।
স্ক্রিপ্টটা ঠিক অবজেক্টের ভেতরে আছে। কোডের বাক্সের উপরের লেবেলটা দেখো।
Window মেনু থেকে Output উইন্ডো খোলো। লাল লেখা দেখায় কোন স্ক্রিপ্টে আর কোন লাইনে সমস্যা।
Explorer এ Workspace এর উপর মাউস রাখো, + এ ক্লিক করে একটা Folder যোগ করো। নাম দাও Checkpoints।
কোর্সের পাশে পাশে তিনটা anchored part বসাও আর সেগুলো ফোল্ডারে টেনে আনো। নাম দাও 1, 2 আর 3। 1 নম্বর part টা শুরুর প্ল্যাটফর্মে থাকবে।
ServerScriptService এর উপর মাউস রাখো, + এ ক্লিক করে একটা Script যোগ করো। এই কোডটা পেস্ট করো।
ServerScriptService > Script
local Players = game:GetService("Players")
local checkpoints = workspace:WaitForChild("Checkpoints")
Players.PlayerAdded:Connect(function(player)
local stats = Instance.new("Folder")
stats.Name = "leaderstats"
stats.Parent = player
local stage = Instance.new("IntValue")
stage.Name = "Stage"
stage.Value = 1
stage.Parent = stats
player.CharacterAdded:Connect(function(character)
local root = character:WaitForChild("HumanoidRootPart")
local point = checkpoints:FindFirstChild(tostring(stage.Value))
if point then
task.wait(0.1)
root.CFrame = point.CFrame + Vector3.new(0, 4, 0)
end
end)
end)
for _, point in ipairs(checkpoints:GetChildren()) do
point.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
local stats = player and player:FindFirstChild("leaderstats")
if not stats then return end
local number = tonumber(point.Name)
if number == stats.Stage.Value + 1 then
stats.Stage.Value = number
end
end)
end
প্রতিটা অংশ কী করে
leaderstats একটা বিশেষ ফোল্ডারের নাম। এর ভেতরের মানগুলো প্লেয়ারের তালিকায় দেখা যায়, তাই সবাই তাদের Stage দেখতে পায়।
ক্যারেক্টার স্পন হলে স্ক্রিপ্ট তাকে সেই চেকপয়েন্টে সরিয়ে দেয় যার নাম প্লেয়ারের Stage এর সমান।
চেকপয়েন্ট ছুঁলে Stage তখনই বাড়ে যখন সেটা পরের চেকপয়েন্ট। এতে প্লেয়াররা মাঝের অংশ এড়িয়ে এগিয়ে যেতে পারে না।
আরও বিস্তারিত
Folder অন্য অবজেক্ট ধরে রাখে, কম্পিউটারের ফোল্ডারের মতো। এটা নিজে গেমে কিছুই করে না।
কোনো part folder-এ ঢোকাতে Explorer-এ তার নাম টেনে Checkpoints নামের উপর ছেড়ে দাও। তখন part-টা এক ধাপ ডানে, folder-এর নিচে বসে।
চেকপয়েন্টের part-গুলো পাতলা আর চওড়া বানাও, যেমন Size 6, 0.4, 6, আর প্ল্যাটফর্মের উপরে বসাও। আলাদা রং হলে খেলোয়াড়দের চোখে পড়ে।
টেস্ট করতে F5 চাপো আর উপরের ডান কোণের খেলোয়াড়ের তালিকা দেখো। তাতে Stage 1 দেখাবে। 2 নম্বর চেকপয়েন্ট ছুঁলে সেটা 2 হয়ে যায়।
চেকপয়েন্টগুলো ক্রমে ছুঁতে হবে। 2-এর আগে 3 ছুঁলে কিছুই হয় না।
সাধারণ ভুল. part গুলোর নাম Checkpoint1 বা One দেওয়া। স্ক্রিপ্ট ঠিক 1, 2 আর 3 নামগুলোই খোঁজে।
এই ধাপটা আমার জন্য কাজ করছে না
আগে এই তিনটা জিনিস দেখে নাও
প্রতিটা part আর স্ক্রিপ্টের নাম ঠিক গাইডের মতো, একই বড় হাতের আর ছোট হাতের অক্ষরসহ।
স্ক্রিপ্টটা ঠিক অবজেক্টের ভেতরে আছে। কোডের বাক্সের উপরের লেবেলটা দেখো।
Window মেনু থেকে Output উইন্ডো খোলো। লাল লেখা দেখায় কোন স্ক্রিপ্টে আর কোন লাইনে সমস্যা।
একদম শেষে একটা বড় anchored part বসাও আর নাম দাও Finish। সেটা সোনালি করো, যাতে প্লেয়াররা লক্ষ্যটা দেখতে পায়।
Finish এ একটা Script যোগ করো আর এই কোডটা পেস্ট করো।
Finish > Script
local Players = game:GetService("Players")
local finish = script.Parent
local cooldown = {}
finish.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
local stats = player and player:FindFirstChild("leaderstats")
if not stats or cooldown[player] then return end
cooldown[player] = true
stats.Stage.Value = 1
player:LoadCharacter()
task.wait(2)
cooldown[player] = nil
end)
প্রতিটা অংশ কী করে
GetPlayerFromCharacter বের করে কোন প্লেয়ার ফিনিশ ছুঁয়েছে।
cooldown table কোডটাকে একই সেকেন্ডে বহুবার চলা থেকে আটকায়।
Stage আবার 1 হয়ে যায়, আর LoadCharacter প্লেয়ারকে আরেকবার খেলার জন্য শুরুতে পাঠিয়ে দেয়।
আরও বিস্তারিত
সোনালি করতে Properties-এর Color ঘরে ক্লিক করে একটা হলুদ বেছে নাও। Material Neon এটাকে ঝকঝকে করে।
Size 12, 1, 12 শেষ জায়গার জন্য ভালো। শেষ লাফের পরে বসাও, বাকিগুলোর চেয়ে একটু উঁচুতে।
টেস্ট করতে F5 চাপো, কোর্সটা শেষ করো আর সোনালি part-টায় পা রাখো। তুমি শুরুতে ফিরে আসো আর Stage আবার 1 দেখায়।
2 সেকেন্ডের অপেক্ষা আছে কারণ একটা পা-ফেলা part-টাকে অনেকবার ছোঁয়।
এই ধাপটা আমার জন্য কাজ করছে না
আগে এই তিনটা জিনিস দেখে নাও
প্রতিটা part আর স্ক্রিপ্টের নাম ঠিক গাইডের মতো, একই বড় হাতের আর ছোট হাতের অক্ষরসহ।
স্ক্রিপ্টটা ঠিক অবজেক্টের ভেতরে আছে। কোডের বাক্সের উপরের লেবেলটা দেখো।
Window মেনু থেকে Output উইন্ডো খোলো। লাল লেখা দেখায় কোন স্ক্রিপ্টে আর কোন লাইনে সমস্যা।
খেলতে F5 চাপো। শুরু থেকে শেষ পর্যন্ত পুরো কোর্সটা দৌড়ে যাও।
ইচ্ছে করে লাভায় পড়ো। তুমি তোমার শেষ চেকপয়েন্টে ফিরে আসবে।
থামাতে Shift+F5 চাপো।
Window মেনু থেকে Output উইন্ডো খোলো। লাল লেখা মানে কোনো স্ক্রিপ্টে ভুল আছে, আর সেটা লাইন নম্বরও দেখায়।
আরও বিস্তারিত
F5 গেমটা তোমার ক্যারেক্টারসহ চালু করে। গেম চলার সময় টুলবার বদলে যায়।
গেম চলার সময় যে বদল করো, থামালে সেগুলো হারিয়ে যায়। সবসময় আগে Shift+F5 চাপো, তারপর এডিট করো।
Output উইন্ডোতে একটা লাল লাইনে ক্লিক করলে Studio স্ক্রিপ্টটা ঠিক সেই লাইনে খোলে যেখানে ভুল আছে।
কিছু কাজ না করলে তিনটা জিনিস দেখো: part-এর নাম, স্ক্রিপ্টটা কোথায় বসানো, আর Anchored চালু আছে কি না।
সাধারণ ভুল. গেম শুরু হতেই একটা প্ল্যাটফর্ম পড়ে যায়: Anchored বন্ধ আছে। কোনো part ছুঁলে কিছু হয় না: স্ক্রিপ্টটা ভুল অবজেক্টে আছে, নয়তো কোনো নামে বানান ভুল আছে।
এই ধাপটা আমার জন্য কাজ করছে না
আগে এই তিনটা জিনিস দেখে নাও
প্রতিটা part আর স্ক্রিপ্টের নাম ঠিক গাইডের মতো, একই বড় হাতের আর ছোট হাতের অক্ষরসহ।
স্ক্রিপ্টটা ঠিক অবজেক্টের ভেতরে আছে। কোডের বাক্সের উপরের লেবেলটা দেখো।
Window মেনু থেকে Output উইন্ডো খোলো। লাল লেখা দেখায় কোন স্ক্রিপ্টে আর কোন লাইনে সমস্যা।