ตอนนี้คุณมีโลก 3D แล้ว ส่วนนี้ของการฝึกเริ่มต้นสอนคุณวิธีการเพิ่มสคริปต์แรกของคุณเพื่ออธิบายกลไกเก็บเหรียญ กลไกนี้ช่วยให้ผู้เล่นเก็บเหรียญได้ และปิดการเก็บเหรียญเมื่อเก็บเหรีย
สร้างเหรียญ
ก่อนที่คุณจะสามารถสคริปต์อะไรได้คุณต้องมีวัตถุที่ว่างเปล่าในโลกเพื่อใช้เป็นเหรียญของคุณ เช่นเดียวกับแท่นยืนทะเลที่คุณสร้างในส่วนก่อนหน้านี้เหรียญสามารถเป็นวัตถุ Part ได้
เพื่อสร้างเหรียญ:
ใน หน้าต่าง Explorer เพิ่มโฟลเดอร์ใหม่ใน โลก โฟลเดอร์แล้วเปลี่ยนชื่อมันเป็น เหรียญ
ใส่ชิ้นส่วน ทรงกระบอก ใน กระเป๋าเหรียญ แล้วเปลี่ยนชื่อชิ้นส่วนเป็น เหรียญ
เลือกชิ้นส่วน แล้วในหน้าต่าง โปรพีเพอร์ตี้
- ตั้ง สีอิฐ เป็น ทอง * ตั้ง วัสดุ เป็น โลหะ * ตั้ง ขนาด เป็น 0.6, 8, 4 * ปิดการใช้งาน CanCollide นี้จะบอกให้เครื่องยนต์ว่าชิ้นอื่นสามารถผ่านเหรียญได้หมายถึงผู้เล่นสามารถเดินผ่านเหรียญเพื่อเก็บพวกเขา
- เปิดใช้งาน ติดขัด นี้จะบอกให้เครื่องยนต์ไม่เคยเปลี่ยนตำแหน่งของเหรียญใด ๆ เนื่องจากการจำลองทางฟิสิกส์ใด ๆ ซึ่งหมายความว่าผู้เล่นสามารถแตะเหรียญโดยไม่ส่งผลกระทบต่อตำแหน่งของมัน
ดับเบิลเหรียญอีกไม่กี่เหรียญและวางพวกเขารอบแผนที่เพื่อวัตถุประสงค์ในการทดสอบ
ตอนนี้จุดสูงของทรงกระบอกของคุณดูเหมือนเหรียญและป้องกันการจำลองฟิสิกส์ แต่คุณต้องเพิ่มโลจิกให้กับเหรียญเพื่อให้ผู้เล่นสามารถเก็บพวกเขาได้
สร้างสคริปต์
เพื่อให้เหรียญสามารถเก็บได้ คุณต้องการตอบสนองต่อผู้เล่นที่แตะพวกเขา เครื่องมือ Roblox สามารถแจ้งให้คุณทราบเมื่อมีอะไรแตะต้องเหรียญ แต่คุณต้องประกาศว่าในสคริป
ใน หน้าต่าง Explorer เลื่อนเมาส์ไปที่ ServerScriptService และคลิกปุ่ม ⊕ ปุ่มคอนเท็กส์ตัวเมนู.
จากเมนูบริบทรัพย์, เลือก สคริปต์ คุณจะเห็นสคริปต์ใหม่ที่ปรากฏภายใต้ ServerScriptService รหัส
เปลี่ยนชื่อสคริปต์เป็น CoinService
แทนที่รหัสเริ่มต้นด้วยรหัสต่อไปนี้:
-- กําลังเริ่มบริการและแปรตัวlocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10-- การตั้งระบบตรวจจับเหตุการณ์local function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- ผู้เล่นแตะต้องเหรียญcoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend-- การตั้งค่าผู้ฟังอีเวนต์for _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)endตอนนี้, เมื่อผู้เล่นแตะต้องเหรียญ, เหรียญจะหายไป 10 วินาที, และบันทึกการออกพิมพ์ Player collected coin .
คำอธิบายรหัสส่วนต่อไปนี้อธิบายวิธีการทำงานของสคริปต์ในรายละเอียดมากขึ้น
กําลังเริ่มบริการและแปรผัน
เช่นเดียวกับโค้ดจำนวนมากที่คุณอาจเขียนในภาษาอื่น ๆ คุณจะกำหนดตัวแปรที่คุณต้องการในภายหลังที่ด้านบนของสคริปต์ กำลังติดตาม:
รับตัวอย่างบริการ - บริการ Roblox ให้คุณสมบัติที่สร้างขึ้นสำหรับคุณสมบัติทั่วไป สคริปต์แรกจะรับตัวอย่างบริการของ Workspace ซึ่งเป็นบริการที่ม
รับคำอ้างอิงของเหรียญทั้งหมด - สคริปต์จากนั้นจะเรียก 3D พื้นที่ทำงานสำหรับทุกคำอ้างอิงไปยังเหรียญโดยใช้วิธี GetChildren()
กำหนดตัวแปร global หนึ่ง - ตัวแปร COOLDOWN ใช้ในภายหลังเพื่อกำหนดระยะเวลาในการปิดใช้งานเหรียญหลังจากที่มันถูกเก็บรวบรวม
กําลังเริ่มบริการและแปรผันlocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10...
กำหนดตัวจัดการเหตุการณ์
เครื่องมือ Roblox จะทําการจําลอง 3D โลกและจัดการกับจํานวนมากของเหตุผลเพื่อจัดการกับเหตุการณ์ที่เกี่ยวข้องกับการเรน
ตรวจสอบว่าเหรียญถูกเปิดใช้งานหรือไม่ ทุกๆ Instance มีค่าตัว Enabled ที่กำหนดว่าว่ามีหรือไม่มีวัตถุในโลก 3D คุณสามารถรับค่าตัว
ตรวจสอบว่าผู้เล่นแตะหุ้น - หากเปิดใช้งานหุ้น วิธีจะใช้บริการผู้เล่นเพื่อตรวจสอบว่าวัตถุที่แตะหุ้นเป็นผู้เล่นจริงหรือไม่ เมื
ปิดเหรียญหากผู้เล่นแตะมัน, และเปิดเหรียญใหม่หลังจาก 10 วินาที - ในที่สุด, หากผู้เล่นแตะเหรียญ, วิธีการปิดเห
การตั้งระเบียบการจัดการอีเวนต์local function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- ผู้เล่นแตะต้องเหรียญcoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend
การเชื่อมต่อตัวประมวลผลอีเวนต์
วัตถุ 3D ทั้งหมดที่จำลองจะได้รับจาก BasePart และดังนั้นจึงมีกิจกรรม Touched() เหตุการณ์ ต่อไปนี้เชื่อมต่อผู้จัดการ onTouchedEvent() ไปยังเ
ห่อนผ่านเหรียญทั้งหมด - ห่อนผ่านแต่ละเหรียญโดยใช้การเรียกทั่วไป
เชื่อมตัวจัดการกับเหตุการณ์ - ในแต่ละการเริ่มต้นของสเต็ปโหลด เหรียญจะเปิดใช้งานโดยค่าเริ่มต้น
การเชื่อมต่อตัวจัดการอีเวนต์for _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)end
ทดสอบผู้เล่นที่จะเป็นผู้ประกอบการ
ถึงเวลาดูว่าหน่วยรวบรวมเหรียญทำงานตามที่คาดไว้หรือไม่ เพื่อทดสอบประสบการณ์ของคุณ:
ในแถบเมนู คลิกปุ่ม เล่น ปุ่ม Studio จะเข้าสู่โหมดทดสอบการเล่น
ย้ายตัวละครของคุณไปสัมผัสกับเหรียญ หากสคริปต์ของคุณทำงานอย่างถูกต้อง หน้าต่าง การออก จะแสดง Player collected coin และเหรียญจะหายไปเป็นเวลา 10 วินาทีก่อนที่จะปรากฏขึ้นอีกคร