Thêm âm thanh 2D

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Âm thanh 2D là âm thanh không định hướng không phát ra từ một vị trí cụ thể nào, vẫn giữ nguyên bất kể vị trí hoặc hướng của người nghe trong không gian 3D. Điều này có nghĩa là khi người chơi di chuyển vị trí nghe của họ xung quanh môi trường, họ có thể nghe thấy âm thanh 2D từ bất kỳ đâu họ quay.

Sử dụng tệp .rbxl Gingerbread House - Start làm điểm khởi đầu và Gingerbread House - Complete Audio làm tài liệu tham khảo, hướng dẫn này sẽ chỉ cho bạn cách thêm cả âm thanh 2D lặp lại và âm thanh một lần vào trò chơi của bạn, bao gồm hướng dẫn về:

  • Nhạc nền lặp lại phát ngay khi người chơi kết nối với máy chủ.
  • Kích hoạt âm thanh để cung cấp phản hồi tức thì cho người chơi theo các mục tiêu chơi game của họ.
  • Kích hoạt các âm thanh khác nhau để chỉ ra các tương tác giao diện người dùng khác nhau.

Nếu bạn gặp khó khăn trong quá trình này, bạn có thể sử dụng Gingerbread House - Complete Audio làm tài liệu tham khảo để so sánh tiến trình của mình.

Các đối tượng âm thanh 2D

Để tạo ra âm thanh không định hướng, điều quan trọng là hiểu các đối tượng âm thanh mà bạn sẽ làm việc trong suốt hướng dẫn này. Có ba loại đối tượng âm thanh chính cho âm thanh 2D:

  • Đối tượng AudioPlayer tải và phát tệp âm thanh.
  • Đối tượng AudioDeviceOutput là một thiết bị phần cứng vật lý trong thế giới thực, chẳng hạn như loa hoặc tai nghe.
  • Wires mang các luồng âm thanh từ một đối tượng này sang đối tượng khác.

Tất cả các đối tượng âm thanh này làm việc cùng nhau để mang âm thanh từ việc phát tệp đến phần cứng của từng người chơi. Hãy cùng xem cách điều này hoạt động trong thực tế bằng cách sử dụng một ví dụ về một người chơi đeo tai nghe trong khi chơi một trò chơi trên máy tính xách tay của họ:

  • Đối tượng AudioPlayer tải ID tài sản âm thanh 127645268874265 vào trò chơi cho âm thanh mua tiền tệ.
  • Một Wire mang luồng từ AudioPlayer đến AudioDeviceOutput để luồng âm thanh phát ra từ tai nghe của người chơi.
  • Đối tượng AudioDeviceOutput mang âm thanh đến loa vật lý của người chơi, hoặc trong trường hợp này, tai nghe của họ.

Các phần tiếp theo sẽ đi sâu hơn và tham chiếu đến các đối tượng này khi bạn học cách phát cả âm thanh 2D lặp lại và âm thanh một lần. Khi bạn xem xét các đối tượng này với các kỹ thuật sắp tới, bạn có thể dự đoán chính xác hơn cách để thu âm và cung cấp âm thanh từ trò chơi đến người chơi.

Âm thanh lặp lại

Âm thanh 2D lặp lại, hoặc âm thanh không định hướng lặp lại ngay khi người chơi kết nối với máy chủ, là một kỹ thuật thiết kế âm thanh phổ biến để cung cấp một nền tảng âm thanh đồng nhất bất kể người chơi đang làm gì hoặc họ đang ở đâu trong không gian 3D. Ngoài ra, âm thanh 2D lặp lại đảm bảo rằng trò chơi của bạn không bao giờ hoàn toàn im lặng, điều này có thể làm mất phương hướng và phân tâm người chơi khỏi các mục tiêu của họ.

Để minh họa khái niệm này, hãy xem cách âm thanh 2D sau đây nâng cao chất lượng của mẫu Trạm Không Gian Nguy Hiểm. Nếu không có nhạc nền, trạm không gian cảm thấy trống rỗng và vô hồn. Tuy nhiên, khi trạm không gian bao gồm nhạc nền, trạm không gian cảm thấy vừa đáng sợ vừa nguy hiểm, làm tăng thêm bầu không khí rùng rợn tổng thể.

Không có âm thanh 2D lặp lại
Có âm thanh 2D lặp lại

Âm thanh lặp lại đặc biệt hữu ích để thiết lập cách bạn muốn người chơi cảm thấy ngay khi họ tham gia trò chơi của bạn. Ví dụ, mẫu này nhằm cung cấp cho người chơi một cuộc phiêu lưu vui vẻ trong một xứ sở mùa đông, vì vậy nó sử dụng một bản nhạc âm thanh vui tươi để ảnh hưởng tích cực đến tâm trạng của họ ngay khi họ bước vào môi trường. Để xem kỹ thuật này có thể ảnh hưởng như thế nào, hãy xem xét cách trải nghiệm của người chơi sẽ thay đổi nếu bạn thay thế âm thanh lặp lại bằng một bản nhạc kim loại.

Để tái tạo âm thanh 2D lặp lại trong mẫu tệp Gingerbread House - Complete Audio:

  1. Kích hoạt một người nghe mặc định được gắn vào nhân vật của bạn.

    1. Trong cửa sổ Explorer, chọn SoundService.
    2. Trong cửa sổ Properties, đặt DefaultListenerLocation thành Character. Khi bạn chạy trò chơi, động cơ sẽ tự động tạo một AudioDeviceOutput dưới SoundService.
  2. Trong cửa sổ Explorer, điều hướng đến SoundService, sau đó:

    1. Chèn một đối tượng AudioPlayer để tạo một nguồn âm thanh.
    2. Chèn một đối tượng AudioDeviceOutput để tạo một loa phát âm thanh trong suốt trò chơi.
    3. Chèn một đối tượng Wire để mang luồng từ trình phát âm thanh đến loa.
  3. Chọn AudioPlayer, sau đó trong cửa sổ Properties,

    1. Đặt AssetID thành rbxassetid://1841461968 để phát một bản nhạc âm thanh vui tươi.
    2. Kích hoạt Looping để âm thanh lặp lại một cách liền mạch.
    3. Đặt Volume thành 0.2 để phát âm thanh ở mức âm lượng thấp để bạn vẫn có thể nghe thấy các nguồn âm thanh khác trong trò chơi.
  4. Chọn Wire, sau đó trong cửa sổ Properties,

    1. Đặt SourceInstance thành AudioPlayer mới của bạn để chỉ định rằng bạn muốn dây mang âm thanh từ trình phát âm thanh cụ thể này.
    2. Đặt TargetInstance thành AudioDeviceOutput mới của bạn để chỉ định rằng bạn muốn dây mang âm thanh đến loa cụ thể này.
  5. Quay lại cửa sổ Explorer, chèn một Script vào AudioPlayer, đổi tên thành LoopBackgroundMusic, đặt thuộc tính RunContext của nó thành Client, sau đó dán mã sau vào script:

    local audioPlayer = script.Parent
    audioPlayer:Play()

    Script bắt đầu bằng cách khai báo một biến để đại diện cho cha của script AudioPlayer. Script sau đó thiết lập nguồn âm thanh để phát từ thời điểm người chơi tham gia trò chơi cho đến khi họ thoát khỏi trò chơi.

  6. Chơi thử trò chơi để nghe nhạc nền lặp lại.

Âm thanh một lần

Âm thanh 2D một lần, hoặc âm thanh không định hướng phát một lần vào một thời điểm và vị trí cụ thể trừ khi một người chơi kích hoạt lại nó, cung cấp cho người chơi bối cảnh quan trọng về bất cứ điều gì bạn không muốn họ bỏ lỡ. Sử dụng loại phản hồi âm thanh này trong trò chơi của bạn là rất quan trọng vì nó cung cấp một phản hồi tức thì, rõ ràng cho các chức năng chơi game quan trọng và hành động của người chơi, chẳng hạn như bắt đầu một trận chiến với trùm hoặc mất một lượng lớn sức khỏe.

Các phần tiếp theo cung cấp chi tiết thực hiện cho các tình huống chơi game phổ biến mà người chơi cần phản hồi không định hướng kịp thời, bao gồm phản hồi chơi game, tương tác với các yếu tố giao diện người dùng, và lồng ghép giọng nói cho các hướng dẫn.

Phản hồi chơi game

Khi người chơi tiến bộ qua trò chơi của bạn, điều quan trọng là họ nhận được phản hồi âm thanh ngay lập tức về trạng thái của bất cứ điều gì ảnh hưởng đến trải nghiệm chơi game của họ, chẳng hạn như điểm số, sức khỏe, hoặc tiến trình cấp độ. Bởi vì loại âm thanh này kết nối trực tiếp với các mục tiêu của người chơi, điều quan trọng là những âm thanh này phải rõ ràng, có thể nghe thấy, và truyền đạt thông tin hữu ích và chính xác.

Để minh họa khái niệm này, hãy xem xét âm thanh 2D một lần sau đây từ mẫu Platformer phát ra khi người chơi nhảy và thu thập tiền xu:

  • Một âm thanh vù vù nhẹ nhàng phát ra ngay khi người chơi nhấn phím nhảy trên thiết bị của họ.
  • Một âm thanh ding cao và âm thanh tiền xu va chạm phát ra ngay khi nhân vật của người chơi chạm vào một đồng xu.

Cả hai âm thanh này đều dễ nhận biết ngay trong bối cảnh không gian 3D, và chúng giúp người chơi hiểu được sự thành công của hành động của họ mà không chỉ dựa vào các tín hiệu hình ảnh.

Khi bạn phát nhiều âm thanh cùng một lúc, một số âm thanh có thể quan trọng hơn để người chơi nghe hơn những âm thanh khác. Trong trường hợp này, âm thanh thu thập tiền xu đang truyền đạt thông tin chơi game có giá trị hơn âm thanh nhảy, vì vậy trò chơi phát nó với âm lượng hơi cao hơn. Tuy nhiên, không có tiêu chuẩn hay quy tắc nào để đạt được một sự pha trộn tuyệt vời, vì vậy hãy điều chỉnh âm thanh trong trò chơi của bạn để phản ánh những gì bạn cảm thấy là quan trọng nhất.

Ví dụ, mẫu này bao gồm nhiều kích hoạt âm thanh trong suốt trò chơi, nhưng không phải tất cả đều ở cùng một mức độ quan trọng để hiểu mục tiêu chính của trò chơi: thu thập kẹo gừng để mở cửa ngôi nhà bánh gừng. Để đảm bảo rằng người chơi nhận thức được những gì họ cần làm, mẫu này gấp ba lần biên độ của phản hồi âm thanh bất cứ khi nào người chơi thu thập một viên kẹo gừng.

Để tái tạo âm thanh phản hồi trạng thái một lần trong mẫu tệp Gingerbread House - Complete Audio:

  1. Trong cửa sổ Explorer, điều hướng đến WorkspaceGumdropsGumdrop, sau đó:

    1. Chèn một đối tượng AudioPlayer để tạo một nguồn âm thanh.
    2. Chèn một đối tượng AudioDeviceOutput để tạo một loa phát âm thanh trong suốt trò chơi.
    3. Chèn một đối tượng Wire để mang luồng từ trình phát âm thanh đến loa.
  2. Chọn AudioPlayer, sau đó trong cửa sổ Properties,

    1. Đặt AssetID thành rbxassetid://9113723699 để phát một bản nhạc âm thanh nhẹ nhàng.
    2. Đặt TimePosition thành 0.15 để bắt đầu bản nhạc âm thanh gần hơn với âm thanh nhai thực tế.
    3. Đặt Volume thành 3 để phát âm thanh ở mức âm lượng cao để bạn nghe thấy âm thanh kẹo gừng trên các nguồn âm thanh khác trong trò chơi.
  3. Chọn Wire, sau đó trong cửa sổ Properties,

    1. Đặt SourceInstance thành AudioPlayer mới của bạn để chỉ định rằng bạn muốn dây mang âm thanh từ trình phát âm thanh cụ thể này.
    2. Đặt TargetInstance thành AudioDeviceOutput mới của bạn để chỉ định rằng bạn muốn dây mang âm thanh đến loa cụ thể này.
  4. Nhân bản Gumdrop cho đến khi bạn có ba viên kẹo gừng, sau đó rải chúng xung quanh môi trường.

  5. Quay lại cửa sổ Explorer, điều hướng đến ServerScriptService, sau đó chèn một Script, đổi tên thành GumdropService, đặt thuộc tính RunContext của nó thành Server, sau đó dán mã sau vào script:

    -- Khởi tạo các dịch vụ
    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local ServerStorage = game:GetService("ServerStorage")
    local TweenService = game:GetService("TweenService")
    -- Các mô-đun
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    -- Biến
    local gumdropsFolder = Workspace.Gumdrops
    local gumdrops = gumdropsFolder:GetChildren()
    local GUMDROP_KEY_NAME = PlayerData.GUMDROP_KEY_NAME
    local GUMDROP_AMOUNT_TO_ADD = 1
    local function updatePlayerGumdrops(player, updateFunction)
    -- Cập nhật bảng kẹo gừng
    local newGumdropAmount = PlayerData.updateValue(player, GUMDROP_KEY_NAME, updateFunction)
    -- Cập nhật bảng xếp hạng kẹo gừng
    Leaderboard.setStat(player, GUMDROP_KEY_NAME, newGumdropAmount)
    -- Kiểm tra xem người chơi đã thu thập ba viên kẹo gừng chưa
    if newGumdropAmount >= 3 then
    -- Phát âm thanh sự kiện cửa khi người chơi thu thập ba viên kẹo gừng
    local audioPlayer = Workspace.Door.AudioPlayer
    audioPlayer:Play()
    -- Hoạt hình cửa để di chuyển xuống
    local doorPart = Workspace.Door
    local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Linear)
    local tween = TweenService:Create(doorPart, tweenInfo, {Position = doorPart.Position + Vector3.new(0, -15, 0)})
    tween:Play()
    end
    end
    -- Định nghĩa trình xử lý sự kiện
    local function onGumdropTouched(otherPart, gumdrop)
    if gumdrop:GetAttribute("Active") then
    local character = otherPart.Parent
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- Người chơi chạm vào một viên kẹo gừng
    local audioPlayer = gumdrop.AudioPlayer
    audioPlayer:Play()
    gumdrop.Transparency = 1
    gumdrop:SetAttribute("Active", false)
    updatePlayerGumdrops(player, function(oldGumdropAmount)
    oldGumdropAmount = oldGumdropAmount or 0
    return oldGumdropAmount + GUMDROP_AMOUNT_TO_ADD
    end)
    end
    end
    end
    -- Thiết lập các trình lắng nghe sự kiện
    for _, gumdrop in gumdrops do
    gumdrop:SetAttribute("Active", true)
    gumdrop.Touched:Connect(function(otherPart)
    onGumdropTouched(otherPart, gumdrop)
    end)
    end

    Script bắt đầu bằng cách khởi tạo các dịch vụ Workspace, Players, ServerStorage, và TweenService để nó có thể tham chiếu đến các đối tượng con và chức năng của chúng. Sau đó, nó yêu cầu các mô-đun LeaderboardPlayerData trong ServerStorage; các mô-đun này chịu trách nhiệm tạo và cập nhật một bảng xếp hạng ở góc trên bên phải của màn hình theo dõi số lượng kẹo gừng mà người chơi thu thập trong môi trường.

    Hàm updatePlayerGumdrops của script chủ yếu chịu trách nhiệm cập nhật bảng xếp hạng mỗi khi người chơi thu thập một viên kẹo gừng, và chờ đợi thời điểm họ thu thập tất cả ba viên kẹo gừng để có thể kích hoạt âm thanh định vị và hoạt hình cho cửa ngôi nhà bánh gừng. Để biết thêm thông tin về phần này của script, hãy xem Thêm âm thanh 3D - Phản hồi sự kiện.

    Hàm onGumdropTouched của script là nơi phần lớn công việc diễn ra để kích hoạt âm thanh 2D cho phản hồi chơi game, và nó nhận hai đối số:

    • otherPart - Một phần va chạm với viên kẹo gừng.
    • gumdrop - Một phần hình cầu đại diện cho một viên kẹo gừng.

    Khi bất kỳ thứ gì va chạm với phần kẹo gừng, script kiểm tra trước xem viên kẹo gừng có đang hoạt động không. Nếu có, nó kiểm tra để xác minh rằng đối tượng va chạm là một người chơi. Nếu có, script sau đó:

    • Phát bản nhạc âm thanh 2D từ trình phát âm thanh.
    • Biến viên kẹo gừng thành vô hình.
    • Vô hiệu hóa viên kẹo gừng để người chơi không thể tương tác với viên kẹo gừng vô hình.
    • Cập nhật bảng xếp hạng cho người chơi đã chạm vào viên kẹo gừng.

    Cuối cùng, script thiết lập các trình lắng nghe sự kiện để cho mỗi viên kẹo gừng, nó kết nối một hàm với sự kiện Touched, mà gọi hàm onGumdropTouched khi một người chơi chạm vào viên kẹo gừng.

  6. Chơi thử trò chơi để nghe âm thanh nhai sau khi bạn thu thập một viên kẹo gừng.

Tương tác UI

Khi người chơi tương tác với các yếu tố giao diện người dùng (UI) của bạn, chẳng hạn như di chuột qua một ô kiểm hoặc chọn một nút mua, điều quan trọng là cung cấp phản hồi tức thì để họ hiểu một cách trực quan cách họ đang tương tác với UI của bạn. Ví dụ, nhiều nhà thiết kế thay đổi các đặc điểm hình ảnh của UI khi người chơi bật hoặc tắt các cài đặt để truyền đạt trạng thái của cài đặt.

Tuy nhiên, đối với những người chơi có khuyết tật thị giác mà việc thay đổi màu sắc hoặc hoạt hình khó khăn hơn để nhận biết, việc cung cấp nhiều hình thức phản hồi cảm giác cho các tương tác UI của bạn là hữu ích để chúng vẫn dễ tiếp cận và trực quan cho càng nhiều người chơi càng tốt. Để mở rộng khái niệm này, hãy xem xét các trạng thái UI sau đây quan trọng cho các nút mua của mẫu UGC Homestore:

  • Đang tập trung - Chỉ ra rằng người chơi đang làm nổi bật một yếu tố UI để chuẩn bị chọn nó.
  • Khi di chuột - Chỉ ra rằng người chơi đang di chuột qua một yếu tố UI bằng con trỏ của họ.
  • Đã chọn - Chỉ ra rằng người chơi đã chọn một yếu tố UI thông qua đầu vào của họ.

Cả ba tương tác này đều rất quan trọng cho quy trình người dùng chính của mẫu, nơi người chơi duyệt, chọn và mua quần áo và phụ kiện cho avatar, vì vậy điều quan trọng là không ai bị nhầm lẫn về cách tương tác với UI. Để chuẩn bị cho người chơi thành công, mẫu cung cấp cả phản hồi hình ảnh và âm thanh cho mỗi tương tác UI.

Phản hồi Hình ảnh
Chế độ xem mặc định
Trạng thái đang tập trung
Trạng thái khi di chuột
Trạng thái đã chọn

Để đưa ra một ví dụ về cách bạn có thể cấu hình nhiều hình thức phản hồi cảm giác, mẫu cung cấp cả phản hồi hình ảnh và âm thanh bất cứ khi nào người chơi nhấn nút kẹo trên màn hình. Khi người chơi không tương tác với nút, nó xuất hiện như một viên kẹo bạc hà điển hình, nhưng khi họ nhấn nút, mẫu sẽ:

  • Phát một bản nhạc âm thanh vui vẻ.
  • Tô màu nút với một sắc thái xanh lam.
  • Di chuyển nút một chút xuống dưới trên màn hình.

Từ đây, bạn có thể kết nối tương tác này với tất cả các loại hành động chơi game hữu ích, chẳng hạn như mở một menu hoặc mua một vật phẩm.

Chế độ xem mặc định
Trạng thái đã nhấn

Để tái tạo âm thanh tương tác UI một lần trong mẫu tệp Gingerbread House - Complete Audio:

  1. Trong cửa sổ Explorer, điều hướng đến StarterGui2DAudioButton, sau đó:

    1. Chèn một đối tượng AudioPlayer để tạo một nguồn âm thanh.
    2. Chèn một đối tượng AudioDeviceOutput để tạo một loa phát âm thanh trong suốt trò chơi.
    3. Chèn một đối tượng Wire để mang luồng từ trình phát âm thanh đến loa.
  2. Chọn AudioPlayer, sau đó trong cửa sổ Properties, đặt AssetID thành rbxassetid://3422389728 để phát một bản nhạc jingle retro.

  3. Chọn Wire, sau đó trong cửa sổ Properties,

    1. Đặt SourceInstance thành AudioPlayer mới của bạn để chỉ định rằng bạn muốn dây mang âm thanh từ trình phát âm thanh cụ thể này.
    2. Đặt TargetInstance thành AudioDeviceOutput mới của bạn để chỉ định rằng bạn muốn dây mang âm thanh đến loa cụ thể này.
  4. Quay lại cửa sổ Explorer, chèn một LocalScript vào 2DAudioButton, đổi tên thành PlayAudioWhenPressed, sau đó dán mã sau vào script:

    local TweenService = game:GetService("TweenService")
    local buttonGui = script.Parent
    local buttonImageButton = buttonGui.ButtonFrame.ButtonImageButton
    local buttonAudioPlayer = buttonGui.AudioPlayer
    local tweenInfo = TweenInfo.new(.2, Enum.EasingStyle.Exponential)
    local buttonTweenByIsPressed = {
    -- Đã nhấn
    [true] = TweenService:Create(buttonImageButton, tweenInfo, {
    Position = buttonImageButton.Position + UDim2.fromScale(0, .1),
    ImageColor3 = Color3.fromRGB(117, 255, 255),
    }),
    -- Mặc định
    [false] = TweenService:Create(buttonImageButton, tweenInfo, {
    Position = buttonImageButton.Position,
    ImageColor3 = Color3.fromRGB(255, 255, 255),
    }),
    }
    local function onIsPlayingChanged()
    local isPlaying = buttonAudioPlayer.IsPlaying
    local tween = buttonTweenByIsPressed[isPlaying]
    tween:Play()
    end
    onIsPlayingChanged()
    buttonAudioPlayer:GetPropertyChangedSignal("IsPlaying"):Connect(onIsPlayingChanged)
    buttonAudioPlayer.Ended:Connect(onIsPlayingChanged)
    buttonImageButton.Activated:Connect(function(_hit)
    buttonAudioPlayer:Play()
    end)

    Script bắt đầu bằng cách lấy:

    • TweenService để nó có thể hoạt hình các yếu tố UI.
    • Đối tượng 2DAudioButton ScreenGui của cha của script.
    • Nút kẹo bạc hà ImageButton.
    • Trình phát âm thanh liên quan với bản nhạc jingle của bạn.

    Script sau đó định nghĩa:

    • Một đối tượng TweenInfo xác định rằng hoạt hình của nút sẽ phát với kiểu hoạt hình mũi tên.
    • Hai tween đại diện cho trạng thái đã nhấn hoặc chưa nhấn của nút.
      • Trạng thái đã nhấn true di chuyển nút một chút xuống dưới trên màn hình và tô màu nó với một sắc thái xanh lam.
      • Trạng thái chưa nhấn false di chuyển nút trở lại vị trí ban đầu trên màn hình và loại bỏ sắc thái trước đó.

    Phần còn lại của script là nơi phần lớn công việc diễn ra để kích hoạt phản hồi tương tác UI 2D, vì vậy hãy xem xét cách hàm onIsPlayingChanged và các trình lắng nghe sự kiện hoạt động cùng nhau cho quy trình người dùng UI:

    1. buttonImageButton.Activated lắng nghe một người chơi nhấp vào nút, sau đó gọi hàm Play() để bắt đầu phát âm thanh liên quan từ trình phát âm thanh. Quá trình này chuyển thuộc tính AudioPlayer.IsPlaying từ false thành true.
    2. buttonAudioPlayer:GetPropertyChangedSignal("IsPlaying") lắng nghe thuộc tính IsPlaying của trình phát âm thanh để thay đổi, sau đó gọi hàm onIsPlayingChanged.
    3. Hàm onIsPlayingChanged sử dụng thông tin này để kích hoạt tween thay đổi hình ảnh của nó trên màn hình.
    4. Để ngăn người chơi vô tình khởi động lại âm thanh nếu họ nhấp vào nút liên tục, buttonAudioPlayer.Ended lắng nghe trình phát âm thanh hoàn thành phát trước khi gọi lại hàm onIsPlayingChanged.

    Điều quan trọng cần lưu ý là sự kiện onIsPlayingChanged chỉ được kích hoạt khi nó thay đổi từ false thành true, có nghĩa là nó không được kích hoạt khi thay đổi từ true thành false. Đây là hành vi dự kiến do các phức tạp với thời gian sao chép thuộc tính từ máy chủ đến khách hàng. Vì lý do này, sự kiện Ended được cung cấp và lắng nghe trong ví dụ này để bao phủ cả hai trường hợp.

  5. Chơi thử trò chơi để nghe bản nhạc jingle mỗi khi bạn nhấn nút trên màn hình.

©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.