AudioEmitter는 오디오 스트림을 세계에 송출합니다. 이 클래스는 단일 Input 핀을 제공하며, 이 핀은 하나 이상의 Wires와 연결될 수 있습니다. AudioEmitter에 연결된 모든 스트림은 이미터의 부모의 위치에서 세계에 방송됩니다. 부모가 Attachment, Camera 또는 PVInstance인 경우, 부모의 세계 위치가 사용됩니다. 부모가 이러한 클래스 중 하나가 아닌 경우, AudioEmitter는 실질적으로 정숙합니다.
AudioEmitters는 AudioListeners에 의해 들리며, 3D 공간화 구현에 사용됩니다.
코드 샘플
local part1: BasePart = workspace.Speakers.Left
local part2: BasePart = workspace.Speakers.Right
local player: AudioPlayer = workspace.AudioPlayer
local leftEmitter = Instance.new("AudioEmitter")
local rightEmitter = Instance.new("AudioEmitter")
local toLeft = Instance.new("Wire")
local toRight = Instance.new("Wire")
leftEmitter.Parent = part1
rightEmitter.Parent = part2
toLeft.Parent = leftEmitter
toLeft.SourceInstance = player
toLeft.TargetInstance = leftEmitter
toRight.Parent = rightEmitter
toRight.SourceInstance = player
toRight.TargetInstance = rightEmitter
player:Play()요약
속성
발생된 소리의 인식된 볼륨이 AudioListener와 AudioEmitter와 연관된 LookVector 사이의 각도에 따라 어떻게 변화하는지를 나타냅니다.
어떤 AudioListeners가 이 AudioEmitter를 들을 수 있는지를 제어합니다.
AudioListener와 AudioEmitter 사이의 거리가 증가함에 따라 발생된 소리의 인식된 볼륨이 어떻게 변화하는지를 나타냅니다.
메서드
AudioEmitter가 사용하는 각도 감쇠 곡선을 가져오거나, 기본 곡선을 사용하는 경우 빈 테이블을 반환합니다.
특정 AudioListener에 대해 이 이미터의 들리는 정도를 계산합니다.
지정된 핀에 연결된 Wires의 배열을 반환합니다.
AudioEmitter가 사용하는 거리 감쇠 곡선을 가져오거나, 기본 곡선을 사용하는 경우 빈 테이블을 반환합니다.
이 이미터의 소리를 들을 수 있는 모든 AudioListeners를 나열합니다.
AudioEmitter가 사용해야 하는 각도 감쇠 곡선을 설정하거나, 제공되지 않으면 볼륨 1의 상수 곡선을 사용합니다.
AudioEmitter가 사용해야 하는 거리 감쇠 곡선을 설정하거나, 제공되지 않으면 역 회귀 곡선을 사용합니다.
이벤트
다른 인스턴스가 Wire를 통해 AudioEmitter에 연결되거나 연결 해제될 때 발생합니다.
속성
메서드
GetInteractingListeners
반환
SetDistanceAttenuation
매개 변수
반환
코드 샘플
local Players = game:GetService("Players")
local emitterPart = Instance.new("Part")
emitterPart.Anchored = true
emitterPart.Position = Vector3.new(0, 0, 0)
emitterPart.Parent = workspace
local emitter: AudioEmitter = Instance.new("AudioEmitter")
emitter.Parent = emitterPart
local curve = {}
curve[10] = 1 -- 10 스터드 내에서 청취자는 이 발신기를 최대 볼륨으로 들을 수 있습니다.
curve[100] = 0.4 -- 100 스터드 거리에서 청취자는 이 발신기를 40% 볼륨으로 들을 수 있습니다.
curve[300] = 0 -- 300 스터드보다 먼 거리에서는 청취자가 이 발신기를 들을 수 없습니다.
emitter:SetDistanceAttenuation(curve)
-- 이전 음성 구현의 롤오프 곡선을 복제합니다.
-- 새 오디오 API 없이 기본 음성은 7에서 80 스터드까지의 이차 롤오프를 사용합니다.
local MIN_DISTANCE = 7
local MAX_DISTANCE = 80
local CURVE_STEP_SIZE = 2
local voiceCurve = {}
for i = MIN_DISTANCE, MAX_DISTANCE, CURVE_STEP_SIZE do
voiceCurve[i] = ((i - MIN_DISTANCE) - (MAX_DISTANCE - MIN_DISTANCE)) ^ 2 / (MAX_DISTANCE - MIN_DISTANCE) ^ 2
end
voiceCurve[MAX_DISTANCE] = 0
local function setVoiceCurve(character)
local voiceEmitter: AudioEmitter = character:WaitForChild("AudioEmitter")
voiceEmitter:SetDistanceAttenuation(voiceCurve)
end
for _, player in Players:GetPlayers() do
if player.Character then
setVoiceCurve(player.Character)
end
player.CharacterAdded:Connect(setVoiceCurve)
end