3D âm thanh là âm thanh định hướng phát ra từ một vị trí cụ thể trong không gian 3D, tăng hoặc giảm âm lượng tùy thuộc vào khoảng cách và hướng giữa nguồn phát âm thanh và người nghe.Điều này có nghĩa là khi các người lắng nghe hoặc phát sóng di chuyển xung quanh môi trường, người chơi có thể nghe nhạc từ các hướng và mức âm lượng khác nhau một cách năng động.
Sử dụng tập tin Gingerbread House - Bắt đầu.rbxl file như một nơi bắt đầu và Gingerbread House - Hoàn thành âm thanh như một tham khảo, hướng dẫn này cho bạn biết cách thêm cả lặp lại và một phát 3D âm thanh vào trải nghiệm của bạn, bao gồm hướng dẫn về:
- Lặp lại các âm thanh môi trường chơi ngay khi người chơi kết nối với máy chủ.
- Kích hoạt âm thanh để thông báo cho người chơi về các sự kiện tình huống quan trọng cho trải nghiệm trò chơicủa họ.
- Kích hoạt âm thanh để cung cấp phản hồi thính giác cho người chơi khi họ tương tác với đối tượng 3D.
- Chơi các cụm âm thanh nhân vật tương tác và hướng dẫn người chơi đến các điểm quan tâm trong môi trường của họ.
Nếu ở bất kỳ thời điểm nào bạn bị mắc kẹt trong quá trình, bạn có thể sử dụng Nhà Gừng - Hoàn thành âm thanh như một tham chiếu để so sánh tiến trình của bạn.
Đối tượng âm thanh
Để tạo ra âm thanh hướng, rất quan trọng để 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ó sáu loại chính của các đối tượng âm thanh:
- Vật thể AudioPlayer tải và chơi tập tin âm thanh .
- Vật AudioEmitter đối tượng là một người phát biểu ảo phát ra âm thanh vào môi trường 3D.
- Vật thể AudioListener là một microphone ảo nhận lấy âm thanh từ môi trường 3D.
- Vật thể AudioDeviceOutput là một thiết bị phần cứng vật lý trong thế giới thực, như một loa hoặc tai nghe.
- Vật thể AudioDeviceInput là một micrô vật lý trong thế giới thực.
- Wires mang luồng âm thanh từ một đối tượng sang đối tượng khác.
Tất cả các đối tượng âm thanh này hoạt động cùng nhau để phát ra âm thanh giống như các đối tượng trong thế giới thực của chúng.Hãy xem xét cách hoạt động này trong thực tế bằng cách sử dụng ví dụ về một người chơi đang mặc tai nghe trong khi chơi một trải nghiệm với máy tính xách tay của họ:
- The AudioPlayer tải 1516791621 audio assetID vào trải nghiệm cho một bản nhạc mưa.
- Các AudioEmitter phát một dòng âm thanh theo dõi mưa vào môi trường 3D.
- Danh sách đối tượng con của nhân vật nghe thấy âm thanh đó trong môi trường 3D và trả lại nó vào tai nghe của họ.
- Vật thể AudioDeviceOutput mang âm thanh từ AudioListener đế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ọ.
- Vật thể AudioDeviceInput bắt sóng âm thanh từ thế giới thực và đưa nó trở lại vào trải nghiệm để chat giọng nói.


Các phần tiếp theo đi sâu hơn và tham chiếu các đối tượng này khi bạn học cách chơi cả lặp lại và một phát 3D âm thanh.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 và phát âm thanh từ trải nghiệm đến người chơi và ngược lại.
Lặp lại âm thanh
Lặp lại âm thanh 3D , hoặc âm thanh hướng dẫn lặp lại một cách liền mạch 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 để nâng cao không khí của không gian 3D bằng cách làm cho nó cảm thấy sống động và năng động.Ngoài ra, việc lặp lại âm thanh 3D giữ cho các nguồn âm thanh môi trường của bạn đồng nhất, chẳng hạn như tiếng tĩnh của một chiếc tivi hoặc tiếng gầm của một thác nước; nếu những âm thanh này bỗng dưng dừng lại, môi trường sẽ cảm thấy vô thực.
Để minh họa khái niệm này, hãy xem xét cách 3D âm thanh sau đây cho hai thác lớn dừng lại ngay khi bản âm thanh được giải thoát hoàn tất.Trong khi nước nghe có vẻ ban đầu thấm nhập người chơi vào môi trường ngoài trời, thay đổi thính giác đột ngột là khó chịu và bất tự nhiên đối với cách một thác nước hành xử trong thế giới thực.
Tương tự, mẫu sử dụng kỹ thuật này cho thác nước sô cô la chảy, và điều chỉnh âm lượng theo khoảng cách của người chơi từ nguồn phát âm thanh.Khi người chơi ở gần hơn 20 đinh tán, nhà phát phát ra âm thanh với âm lượng tối đa.Khi người chơi di chuyển xa hơn, âm thanh sloshing giảm dần về âm lượng mỗi 20 đinh tán xa khỏi nhà phát âm.Điều này tái hiện âm thanh thế giới thực giảm dần theo tỷ lệ âm lượng khi bạn càng xa nguồn.
Để tái tạo âm thanh lặp 3D trong mẫu Nhà Gừng - Hoàn thành âm thanh nơi file:
Bật một bộ lắng nghe mặc định được gắn vào nhân vật người chơi của bạn.
- Trong cửa sổ Explorer , hãy chọn SoundService .
- Trong cửa sổ Tính năng , đặt DefaultListenerLocation thành Nhân vật .Khi bạn chạy trải nghiệm, động cơ tự động:
- Tạo một AudioListener dưới mỗi nhân vật người chơi Humanoid.RootPart để bạn có thể nghe được tiếng chuyển đổi âm thanh trong các loa thế giới thực theo vị trí và quy mô của nguồn âm thanh trong trải nghiệm.
- Tạo một AudioDeviceOutput dưới Dịch vụ âm thanh .
Trong cửa sổ Explorer , hãy di chuyển đến Workspace > WaterfallAudioObject , sau đó:
- Thêm một đối tượng Người chơi âm thanh để tạo nguồn âm thanh cho thác nước.
- Thêm một đối tượng Phát thanh âm thanh để phát một dòng vị trí từ WaterfallAudioObject .
- Chèn một đối tượng Dây để chuyển dòng từ máy phát âm thanh sang máy phát âm thanh.
Chọn Trình phát âm thanh , sau đó trong cửa sổ Tính năng ,
- Chỉnh AssetID thành rbxassetid://1516791621 để chơi một bản nhạc mưa.
- Bật Lặp lại để làm cho âm thanh lặp lại mà không có sự lặp lại.
Chọn AudioEmitter , sau đó trong cửa sổ Tính năng , đặt Giảm khoảng cách đến {0: 1}, {20: 0.8}, {40: 0.4}, {80: 0} để tiếng âm giảm dần về âm lượng mỗi 20 đinh tán từ emitter âm thanh.
Chọn Sợi , sau đó trong cửa sổ Tính năng ,
- Chỉnh SourceInstance cho AudioPlayer mới của bạn để xác định rằng bạn muốn dây dẫn chuyển âm thanh từ người chơiphát âm thanh cụ thể này.
- Chỉnh TargetInstance cho AudioEmitter mới của bạn để xác định rằng bạn muốn dây dẫn chuyển âm thanh đến bộ giải mã âm thanh cụ thể này trong thác nước.
Trở lại cửa sổ Explorer , hãy nhập một Tập lệnh vào WaterfallAudioObject , đổi tên nó thành LoopWaterfallMusic , sau đó chỉnh thuộc tính Chạy bối cảnh của nó thành Khách hàng , sau đó dán mã sau vào tập lệnh:
local audioPlayer = script.ParentaudioPlayer:Play()Giải thích mãTập lệnh bắt đầu bằng cách tuyên bố một biến để đại diện cho cha của tập lệnh AudioPlayer .Tiếp theo, kịch bản thiết lập nguồn âm thanh để phát từ thời điểm người chơi tham gia trải nghiệm đến thời điểm họ thoát khỏi trải nghiệm.
Thử nghiệm trải nghiệm để nghe âm thanh mưa sô cô la lặp lại khi avatar của bạn gần thác nước.Khi bạn xoay đầu nhân vật của mình để nhìn theo hướng khác, âm thanh sẽ chuyển động theo thời gian trong các loa thế giới thực theo vị trí của phát xạ trong không gian 3D.
Một phát âm thanh
Một lần bắn 3D âm thanh , hoặc âm thanh định hướng chơi 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 nó một lần nữa, cung cấp cho người chơi bối cảnh về hành động của họ, môi trường và bất kỳ nhân vật xung quanh họ.Sử dụng loại phản hồi thính giảc này trong trải nghiệm của bạn là rất quan trọng vì nó cho phép người chơi đưa ra các quyết định chiến lược như tránh kẻ thù sắp tới hoặc nhặt các vật phẩm hữu ích.
Các phần sau cung cấp chi tiết thực hiện cho các tình huống chơi thông thường mà người chơi cần phản hồi thời gian, hướng, bao gồm các sự kiện chơi tình huống, tương tác đối tượng và không có cuộc đối thoại nhân vật không thể chơi.
Phản hồi sự phản hồi
Khi các người chơi kích hoạt các sự kiện tình huống chính trong môi trường của họ, chẳng hạn như mở khóa các khu vực chơi mới hoặc kích hoạt lửa của kẻ thù, thì rất quan trọng là họ hiểu nơi trong không gian 3D họ cần chuyển tập trung và sự chú ý của họ.Nếu họ không nhận được phản hồi âm thanh ngay lập tức, họ có thể bỏ lỡ thông tin quan trọng cho trải nghiệm trò chơicủa họ, dẫn đến sự thất vọng khi không biết nên đi đâu hoặc làm gì tiếp theo.
Để minh họa lý do tại sao điều này quan trọng, hãy xem xét một bản 3D âm thanh một phát từ mẫu Laser Tag chơi từ máy phát bắn của mỗi người chơi:
- Một âm thanh pop sâu chơi cho mỗi vụ nổ mà người chơi bắn từ blaster của họ.
- Một âm thanh nhấp chuột và robot beep được phát mỗi khi người chơi tải lại blaster của họ với một vòng mới.
Cả hai âm thanh này cung cấp nhận thức về tình huống bằng cách cảnh báo tất cả các người chơi gần đó về hướng mà các vụ nổ đang đến từ đó để họ có thể đưa ra các quyết định có thông tin để tham gia vào niềm vui hoặc tránh nguy hiểm tiềm ẩn.
Mẫu sử dụng kỹ thuật tương tự này để cung cấp cho người chơi nhận thức tình huống về phần thưởng của họ vì hoàn thành mục tiêu chính trong trải nghiệm.Sau khi thu thập tất cả ba viên kẹo, cánh cửa dẫn đến nhà bánh gừng sẽ mở ra để cho phép người chơi truy cập vào hiện tại bên trong.
Bởi vì không có một lệnh cụ thể mà người chơi cần thu thập các hạt nhựa, nó là quan trọng rằng người chơi nhận thức được cửa mở bất kể hạt nhựa nào họ thu thập cuối cùng.Âm thanh vị trí làm cho điều này có thể để người chơi nhận thấy thành công của họ và nơi họ cần đi tiếp theo bất kể khoảng cách và hướng tương đối từ cửa.
Để tái tạo lại phản hồi âm thanh sự kiện một phát trong mẫu Nhà Gừng - Hoàn thành âm thanh nơi file:
Trong cửa sổ Explorer , hãy di chuyển đến Workspace > Cửa , sau đó:
- Chèn một đối tượng Trình phát âm thanh để tạo nguồn âm cho âm lượng.
- Chèn một đối tượng Phát thanh âm thanh để phát một dòng vị trí từ Cửa .
- Chèn một đối tượng Dây để chuyển dòng từ máy phát âm thanh sang máy phát âm thanh.
Chọn Trình phát âm thanh , sau đó trong cửa sổ Tính năng , đặt AssetID thành rbxassetid://5930776613 để chơi một bản nhạc cổng kim loại trượt.
Chọn Sợi , sau đó trong cửa sổ Tính năng ,
- Chỉnh SourceInstance cho AudioPlayer mới của bạn để xác định rằng bạn muốn dây dẫn chuyển âm thanh từ người chơiphát âm thanh cụ thể này.
- Chỉnh TargetInstance cho AudioEmitter mới của bạn để xác định rằng bạn muốn dây dẫn chuyển âm thanh đến bộ giải mã âm thanh cụ thể này trong phạm vi âm lượng.
Trở lại cửa sổ Explorer , hãy di chuyển đến ServerScriptService , sau đó chèn một Tập lệnh , đổi tên nó thành GumdropService , đặt thuộc tính RunContext của nó thành Server , sau đó dán mã sau vào tập lệnh:
-- Khởi tạo biếnlocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local ServerStorage = game:GetService("ServerStorage")local TweenService = game:GetService("TweenService")-- Mô-đunlocal Leaderboard = require(ServerStorage.Leaderboard)local PlayerData = require(ServerStorage.PlayerData)-- Biếnlocal gumdropsFolder = Workspace.Gumdropslocal gumdrops = gumdropsFolder:GetChildren()local GUMDROP_KEY_NAME = PlayerData.GUMDROP_KEY_NAMElocal GUMDROP_AMOUNT_TO_ADD = 1local function updatePlayerGumdrops(player, updateFunction)-- Cập nhật bảng gumdroplocal newGumdropAmount = PlayerData.updateValue(player, GUMDROP_KEY_NAME, updateFunction)-- Cập nhật bảng xếp hạng gumdropLeaderboard.setStat(player, GUMDROP_KEY_NAME, newGumdropAmount)-- Kiểm tra xem người chơi đã thu thập ba viên kẹo có chứa gum khôngif newGumdropAmount >= 3 then-- Chơi âm thanh sự kiện cửa khi người chơi thu thập ba viên kẹolocal audioPlayer = Workspace.Door.AudioPlayeraudioPlayer:Play()-- Hoạt hình cửa di chuyển xuốnglocal doorPart = Workspace.Doorlocal tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Linear)local tween = TweenService:Create(doorPart, tweenInfo, {Position = doorPart.Position + Vector3.new(0, -15, 0)})tween:Play()endend-- Xác định người xử lý sự kiệnlocal function onGumdropTouched(otherPart, gumdrop)if gumdrop:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Người chơi chạm vào một gumdroplocal audioPlayer = gumdrop.AudioPlayeraudioPlayer:Play()gumdrop.Transparency = 1gumdrop:SetAttribute("Enabled", false)updatePlayerGumdrops(player, function(oldGumdropAmount)oldGumdropAmount = oldGumdropAmount or 0return oldGumdropAmount + GUMDROP_AMOUNT_TO_ADDend)print("Player collected gumdrop")endendend-- Thiết lập người lắng nghe sự kiệnfor _, gumdrop in gumdrops dogumdrop:SetAttribute("Enabled", true)gumdrop.Touched:Connect(function(otherPart)onGumdropTouched(otherPart, gumdrop)end)endGiải thích mãTập lệnh này bắt đầu bằng cách khởi tạo Workspace , Players , ServerStorage và TweenService dịch vụ để nó có thể tham chiếu đến con của chúng và chức năng của chúng.Sau đó, nó yêu cầu các mô-đun Bảng xếp hạng và Dữ liệu người chơi trong ServerStorage ; các mô-đun này có trách nhiệm tạo và cập nhật bảng xếp hạng ở góc trên cùng bên phải của màn hình theo dõi số lượng viên kẹo mà một người chơi thu thập trong môi trường.
Chức năng của updatePlayerGumdrops kịch bản là nơi phần lớn công việc xảy ra để kích hoạt âm thanh 3D cho phản hồi sự kiện, và nó cần hai tham số:
- player - Một người chơi thu thập một gumdrop.
- updateFunction - Một chức năng gọi lại cập nhật số gumdrop thu thập của người chơi.
Khi một người chơi va chạm với một gumdrop, kịch bản:
- Nhận được giá trị số lượng gumdrop mới của người chơi bằng cách gọi chức năng PlayerData.updateValue.
- Cập nhật bảng xếp hạng với số tiền mới này bằng cách gọi chức năng Leaderboard.setStat.
- Kiểm tra xem số tiền có lớn hơn hoặc bằng 3 không.
Khi giá trị này lớn hơn hoặc bằng 3 , thì kịch bản:
- Chơi bản nhạc 3D từ máy phát âm thanh đến máy phát âm thanh.
- Di chuyển dòng cửa theo chiều dọc 15 đinh tán dưới vị trí hiện tại của nó.
Phần còn lại của kịch bản chủ yếu chịu trách nhiệm phát hiện bất cứ thứ gì va chạm với gumdrop là một người chơi để có thể kích hoạt một âm thanh không định vị để phản hồi thu thập.Để biết thêm thông tin về phần này của kịch bản, xem Thêm âm thanh 2D - Phản hồi gameplay .
Thử nghiệm trải nghiệm để nghe tiếng cổng trượt sau khi bạn thu thập tất cả ba viên kẹo trong môi trường.Khi bạn xoay máy ảnh, âm thanh sẽ chuyển động theo thời gian trong các loa thế giới thực của bạn để bạn nghe nó theo vị trí của phát xạ viên trong không gian 3D.
Tương tác đối tượng
Khi người chơi tương tác với các đối tượng 3D trong môi trường của họ, chẳng hạn như bật công tắc ánh sáng hoặc nhặt vũ khí, thì quan trọng phải cung cấp phản hồi ngay lập tức để họ hiểu ngay lập tức làm thế nào họ đang tương tác với đối tượng.Việc kết hợp cả phản hồi hình ảnh và âm thanh làm tăng mối quan hệ nguyên nhân và kết quả giữa các hành động của người chơi và phản ứng môi trường.
Để mở rộng về khái niệm này, hãy xem xét một phát 3D âm thanh sau đây từ mẫu Cây cho dòng chảy người dùng trồng cải:
- Một âm thanh nhẹ chát chúa phát ra khi người chơi gieo một hạt giống.
- Một âm thanh ướt, giống như làn sóng chơi khi người chơi tưới nước cho cây đang lớn lên của họ.
- Một âm thanh cắt khi người chơi thu thập cây trưởng thành.
- Một âm thanh thud mềm phát khi người chơi đặt bắp cải vào toa.
Tất cả những âm thanh này làm tăng sự tương tác gần của người chơi với phím thông báo cảnh báo với đối tượng thay đổi hình dạng trong không gian 3D.Đối với người chơi có khó khăn về thị giác mà các thay đổi màu sắc hoặc hoạt hình khó giải mã hơn trên sở hữuhọ, cung cấp những hình thức phản hồi cảm giác nhiều lần này sẽ giúp các tương tác 3D của bạn vẫn có thể truy cập và dễ hiểu cho nhiều người chơi nhất có thể.
Để đưa ra một ví dụ khác về cách bạn có thể cấu hình tương tác đối tượng với nhiều loại phản hồi cảm giác, mẫu cung cấp cả phản hồi hình ảnh và âm thanh mỗi khi người chơi bước vào nút peppermint 3D trong nhà gừng.Khi người chơi không tương tác với nút, nó xuất hiện giống như một kẹo bạc hà thông thường, nhưng khi họ bước vào nút, mẫu:
- Chơi một bản nhạc chuông lễ hội.
- Thay đổi màu sắc các cạnh của nút với một màu xanh lá cây.
- Di chuyển nút vào mặt đất.
Từ đây, bạn có thể kết nối tương tác này với tất cả các hành động chơi độc đáo, chẳng hạn như mở khóa một vật phẩm hoặc kích hoạt một khả năng đặc biệt.


Để tái tạo sự tương tác 3D âm thanh một phát của đối tượng trong mẫu Nhà Gừng - Hoàn thành âm thanh file:
Trong cửa sổ Explorer , hãy di chuyển đến Workspace > 3DAudioButton , sau đó:
- Chèn một đối tượng Trình phát âm thanh để tạo nguồn âm cho nút.
- Chèn một đối tượng AudioEmitter để phát một dòng vị trí từ 3DAudioButton .
- Chèn một đối tượng Dây để chuyển dòng từ máy phát âm thanh sang máy phát âm thanh.
Chọn Trình phát âm thanh , sau đó trong cửa sổ Tính năng , đặt AssetID thành rbxassetid://1846248593 để chơi một bản nhạc vui vẻ, ăn mừng.
Chọn Sợi , sau đó trong cửa sổ Tính năng ,
- Chỉnh SourceInstance cho AudioPlayer mới của bạn để xác định rằng bạn muốn dây dẫn chuyển âm thanh từ người chơiphát âm thanh cụ thể này.
- Thiết lập TargetInstance cho AudioEmitter mới của bạn để xác định rằng bạn muốn dây dẫn mang âm thanh đến các bộ phát âm thanh cụ thể này trong nút.
Trở lại cửa sổ Explorer , hãy nhập một Script vào 3DAudioButton , đổi tên nó thành PlayAudioWhenPressed , sau đó dán mã sau vào kịch bản:
local TweenService = game:GetService("TweenService")local buttonModel = script.Parent.Parentlocal buttonPart = buttonModel.ButtonPartlocal buttonPressedAudioPlayer = buttonModel.ButtonPressedAudioPlayerlocal tweenInfo = TweenInfo.new(.2, Enum.EasingStyle.Exponential)local buttonTweenByIsPressed = {-- Bị ép[true] = TweenService:Create(buttonPart, tweenInfo, {Size = buttonPart.Size / Vector3.new(2, 1, 1),Color = Color3.fromRGB(75, 151, 75),}),-- Mặc định[false] = TweenService:Create(buttonPart, tweenInfo, {Size = buttonPart.Size,Color = Color3.fromRGB(196, 40, 28),}),}local function onIsPlayingChanged()local isPlaying = buttonPressedAudioPlayer.IsPlayinglocal tween = buttonTweenByIsPressed[isPlaying]tween:Play()endonIsPlayingChanged()buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying"):Connect(onIsPlayingChanged)buttonPressedAudioPlayer.Ended:Connect(onIsPlayingChanged)buttonPart.Touched:Connect(function(_hit)buttonPressedAudioPlayer:Play()end)Giải thích mãTập lệnh bắt đầu bằng cách nhận:
- The TweenService để nó có thể hoạt hình phần nút nằm ngoài mặt đất.
- Mô hình cha của kịch bản 3DAudioButton .
- Phần nút nằm ngoài mặt đất.
- Người chơi âm thanh liên quan với bản âm thanh lễ hội của bạn.
Tiếp theo, kịch bản xác định:
- Một đối tượng TweenInfo được xác định rằng hoạt hình của nút sẽ được chơi với một kiểu hoạt hình exponential.
- Hai thiếu niên đại diện cho trạng thái nhấn hoặc không nhấn của nút.
- Trạng thái được nhấn true di chuyển nút sang một bên nhẹ xuống mặt đất và thay đổi màu các bên của phần với một màu xanh lá cây.
- Trạng thái không bị nén false di chuyển nút trở lại vị trí ban đầu và loại bỏ màu sắc trước đó.
Phần còn lại của kịch bản là nơi phần lớn công việc xảy ra để phản hồi phản hồi tương tác đối với đối tượng, vì vậy hãy xem xét cách chức năng onIsPlayingChanged và người lắng nghe sự kiện hoạt động cùng nhau:
- buttonPart.Touched lắng nghe một người chơi chạm vào nút, sau đó gọi chức năng Play() để bắt đầu chơi âm thanh liên quan từ máy phát âm thanh.Quá trình này chuyển thuộc tính AudioPlayer.IsPlaying từ false sang true .
- buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying") lắng nghe chỉ số IsPlaying của người chơi âm thanh để thay đổi, sau đó gọi chức năng onIsPlayingChanged .
- Chức năng onIsPlayingChanged sử dụng thông tin này để kích hoạt tween thay đổi sự xuất hiện hình ảnh của nó trong không gian 3D.
- Để ngăn chặn người chơi không vô tình khởi động lại âm thanh nếu họ nhảy nhanh vào nút trong chuỗi thành công nhanh chóng, buttonPressedAudioPlayer.Ended lắng nghe cho người chơi âm thanh kết thúc chơi trước khi gọi lại chức năng onIsPlayingChanged một lần nữa.
Quan trọng là phải lưu ý rằng sự kiện onIsPlayingChanged chỉ bắt lửa khi nó thay đổi từ false sang true, có nghĩa là nó không bắt lửa khi thay đổi từ true sang false .Đây là hành vi được dự định do các biến cố với thời gian sao chép các thuộc tính từ máy chủ sang khách hàng.Vì vậy, sự kiện Ended được cung cấp và lắng nghe trong ví dụ này để bao gồm cả hai trường hợp.
Thử nghiệm trải nghiệm để nghe tiếng tăng trưởng khi nhân vật người chơi chạm vào nút 3D trong nhà bánh gừng.Khi bạn đi xa nút, âm lượng của âm thanh giảm.
Diễn đạt nhân vật
Cung cấp âm thanh hướng dẫn từ các nhân vật không thể chơi của bạn (NPC) là hữu ích để hướng dẫn người chơi đến các điểm quan tâm trong môi trường của họ và thêm chiều sâu cho các tương tác của họ với các nhân vật khác.Trong thực tế, trong các trò chơi dựa trên câu chuyện, nhiều nhà thiết kế trò chơi chiến lược sử dụng diálogo nhân vật để gián tiếp dạy người chơi về nhân vật, đồng minh và kẻ thù của họ, hoặc thế giới nói chung.
Ví dụ thông thường của kỹ thuật này bao gồm:
- Phong cách trò chuyện để đặt tone của trò chơi của bạn.
- Banter để dạy người chơi về các mối quan hệ nhân vật.
- Cuộc trò chuyện kẻ thù để thú nhận động cơ hoặc vị trí của họ so với người chơi.
- Nhân vật người chơi nói suy nghĩ của họ to lớn để dịu dàng dẫn người chơi đến những gì họ nên làm tiếp theo, chẳng hạn như tự chữa lành, di chuyển đến một vị trí khác hoặc tìm một vật phẩm.
- Nhân vật đồng minh nói chuyện với nhân vật người chơi để tiết lộ chi tiết thế giới trong kinh nghiệm như lịch sử, văn hóa và vấn đề xã hội.
Để minh họa những gì có thể xảy ra trong thực tế, hãy xem xét một phát 3D âm thanh sau đây từ Beyond the Dark triển lãm chơi định kỳ khi người chơi ở trong khu vực sảnh chính của trạm vũ trụ.
Sử dụng trạm vũ trụ làm nhân vật, cảnh thoại này cung cấp cho người chơi ngữ cảnh và kiến thức quan trọng về tổng thiết cài đặt.Ví dụ, từ câu này duy nhất người chơi học:
- Họ ở trong không gian, cụ thể trên một trạm vũ trụ có tên là Kerr-Newman Deep Space Relay 14.
- Môi trường của họ là tương lai và thân thiện.
- Họ là một khách truy cập và có thể sẽ sớm rời đi.
Các chi tiết này cùng nhau thấm nhập người chơi vào môi trường của họ và thêm một cảm giác khẩn thiết cho nhiệm vụ của họ.Tuy nhiên, nếu người chơi không biết nhiệm vụ chính của họ là gì, bạn cũng có thể sử dụng cuộc trò chuyện nhân vật để thông báo cho người chơi những gì bạn muốn họ làm trong trải nghiệm của bạn.
Để minh họa, mẫu sử dụng một âm lượng , hoặc khu vực không thể nhìn thấy bên trong không gian 3D, để kích hoạt cuộc đối thoại nhân vật từ người tuyết để hướng dẫn người chơi thu thập ba viên kẹo để mở cửa cho trang chủcủa anh ta.Là một trong những điều đầu tiên mà người chơi nhìn thấy khi họ tham gia vào trải nghiệm, người chơi có nhiều khả năng kích hoạt cuộc đối thoại và biết những gì họ cần phải làm để thành công.

Để tái tạo cuộc đối thoại nhân vật một phát 3D âm thanh trong mẫu Nhà Gừng - Hoàn thành âm thanh file:
Trong cửa sổ Explorer , hãy di chuyển đến Workspace > Volume trò chuyện rồi:
- Chèn một đối tượng Trình phát âm thanh để tạo nguồn âm cho âm lượng.
- Chèn một đối tượng Phát thanh âm thanh để phát một dòng vị trí từ DialogueVolume .
- Chèn một đối tượng Dây để chuyển dòng từ máy phát âm thanh sang máy phát âm thanh.
Chọn Trình phát âm thanh, sau đó trong cửa sổ Tính năng, đặt AssetID thành để chơi một bản âm thanh hướng dẫn cho mục tiêu của trải nghiệm.
Chọn Sợi , sau đó trong cửa sổ Tính năng ,
- Chỉnh SourceInstance cho AudioPlayer mới của bạn để xác định rằng bạn muốn dây dẫn chuyển âm thanh từ người chơiphát âm thanh cụ thể này.
- Chỉnh TargetInstance cho AudioEmitter mới của bạn để xác định rằng bạn muốn dây dẫn chuyển âm thanh đến bộ giải mã âm thanh cụ thể này trong phạm vi âm lượng.
Trở lại cửa sổ Explorer , hãy di chuyển đến StarterPlayer > StarterCharacterScripts , chèn một LocalScript , đổi tên nó thành PlayAudioWhenInVolume , và dán mã sau vào kịch bản địa phương:
local Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local humanoid = script.Parent:WaitForChild("Humanoid")local volumeDetector = Workspace.DialogueVolumelocal trigger = humanoid:WaitForChild("Animator")local debounce = falselocal localPlayer = Players.LocalPlayervolumeDetector.Touched:Connect(function(hit)if debounce thenreturnendlocal hitCharacter = hit:FindFirstAncestorWhichIsA("Model")local hitPlayer = Players:GetPlayerFromCharacter(hitCharacter)if hitPlayer ~= localPlayer thenreturnenddebounce = truelocal audioPlayer = Workspace.DialogueVolume.AudioPlayeraudioPlayer:Play()audioPlayer.Ended:Wait()debounce = falseend)Giải thích mãTập lệnh này bắt đầu bằng cách nhận các dịch vụ Workspace và Người chơi để có thể tham chiếu đến con của họ và chức năng của họ.Đối với mỗi nhân vật người chơi được tải hoặc hồi sinh trở lại vào trải nghiệm, kịch bản chờ đợi:
- Vật thể âm lượng trong không gian làm việc có tên là DialogueVolume .
Khi có bất kỳ thứ gì va chạm với âm lượng, chức năng xử lý sự kiện Touched nhận được tổ tiên đầu tiên là Model , đó là nhân vật nếu đối tượng BasePart va chạm với âm lượng là con cháu của một mô hình nhân vật.Nếu nó là, chức năng sau đó:
- Đặt giảm bớt thời gian chờ xuống true .
- Chơi và chờ đợi cho đến khi âm thanh kết thúc.
- Bộ trả lại giảm thời gian trở lại false .
Cài đặt giảm thời gian chờ từ false đến true đến false một lần nữa sau khi kết thúc phát âm thanh là một mô hình giảm thời gian chờ ngăn chặn âm thanh không lặp lại như người chơi liên tục va chạm với âm lượng.Để biết thêm thông tin về mẫu giảm thời gian này, xem Phát hiện va chạm .
Thử nghiệm trải nghiệm để nghe đối thoại nhân vật hướng dẫn khi nhân vật người chơi chạm vào âm lượng xung quanh người tuyết.