BindableEvent 및 BindableFunction 개체를 사용하면 스크립트 사이의 동작을 바인딩하고 클라이언트-서버 경계의 동작을 통신하여 경험 내 작업에 대한 특정 원하는 결과를 표시할 수 있습니다.
바인딩 가능한 이벤트의 가장 일반적인 사용 사례는 둥근 기반 구조를 가진 경험입니다. 예를 들어, "매치 시작"이라는 이벤트가 있으며 다른 스크립트가 타이머를 시작하고 리더보드표시하는 것과 같은 순위표를 표시하는 것과 같은 순위표를 표시하는 것입니다.
스크립트 간의 활동을 조정하기 위해 바인딩된 이벤트는 일반적으로 서버에서 사용되지만, 클라이언트에서도 사용할 수 있습니다.
경험의 작동 방식에 따라 바인딩 가능한 이벤트는 코드를 더 모듈러로 만들 수 있지만, 모듈 스크립트는 종종 스크립트 간의 데이터 공유가 필요한 상황에 대한 더 나은 대안입니다. 모듈 스크립트와 함께 바인딩 가능한 이벤트를 사용하면 더 나은
바인딩 가능한 이벤트
Class.BindableEvent 개체는 스크립트 간의 비동기 한 방향 통신을 통해 사용자 정의 이벤트를 활성화합니다.
Class.BindableEvent를 통해 Fire() 메서드를 통해 발사 스크립트는 생성 하지 않으며 대상 함수는 특정 1>제한1>을 가진 전달된 인수를 수신합니다. 모든 이벤트는
Studio의 BindableEvent 창을 사용하여 새로운 Class.BindableEvent를 생성하려면:
- Class.BindableEvent 을 삽입하려는 컨테이너에 마우스를 이동하십시오. 서버 스크립트 및 클라이언트 스크립트 간의 통신을 위해 ServerScriptService 를 사용하는 것이 좋습니다. 클라이언트 스크립트 간의 통신을 위해 ReplicatedStorage 를 사용하는 것이 좋습니다.
- 클릭하여 컨테이너 이름의 오른쪽에 나타나는 ⊕ 버튼을 클릭하고 BindableEvent 인스턴스를 삽입합니다.
- 인스턴스를 TestBindableEvent로 이름 변경.
만든 후 BindableEvent 을 하나의 스크립트에 연결하고 이 스크립트에서 이벤트를 생성하고 다른 스크립트에서 이벤트를 생성하고 이 스크립트에서 이벤트를 생성하고 다른 스크립트에서 이벤트를 생성하고 이 스크립트에서 이벤트를 생성하고 다른 스크립트에서 이벤트를 생성하고
이벤트 연결
local ServerScriptService = game:GetService("ServerScriptService")
-- 바인딩 가능한 이벤트 인스턴스에 대한 참조 받기
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
-- 익명 함수를 이벤트에 연결
bindableEvent.Event:Connect(function(data)
print(data) --> 라운드가 시작되었습니다!
end)
이벤트 발생
local ServerScriptService = game:GetService("ServerScriptService")-- 바인딩 가능한 이벤트 인스턴스에 대한 참조 받기local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")-- 발생 가능한 이벤트 바인딩bindableEvent:Fire("Round started!")
사용자 정의 콜백
Class.BindableFunction 개체는 스크립트 간의 동기 통신을 가능하게 합니다. 이 개체를 사용하여 사용자 정의 콜백 함수를 정의하고 BindableFunction:Invoke() 를 수동으로
Studio의 BindableFunction 창을 사용하여 새로운 Class.BindableFunction을 생성하려면:
- Class.BindableFunction 을 삽입하려는 컨테이너에 마우스를 이동하십시오. 서버 스크립트 및 클라이언트 스크립트 간의 통신을 위해 ServerScriptService 를 사용하는 것이 좋습니다. 클라이언트 스크립트 간의 통신을 위해 ReplicatedStorage 를 사용하는 것이 좋습니다.
- 클릭하여 컨테이너의 이름 오른쪽에 나타나는 ⊕ 버튼을 클릭하고 BindableFunction 인스턴스를 삽입합니다.
- 인스턴스를 TestBindableFunction로 이름 변경.
Class.BindableFunction 을 생성한 후, 한 스크립트에서 그의 OnInvoke 콜백에 연결하고, 다른 스크립트에서 Invoke() 콜백 함수를 호출할 수 있습니다.
콜백 연결
local ServerScriptService = game:GetService("ServerScriptService")
-- 바인딩 가능한 함수에 대한 참조 얻기
local bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")
-- 콜백 함수
local function addTwoNumbers(a, b)
return a + b
end
-- 함수를 바인딩 함수 콜백으로 설정
bindableFunction.OnInvoke = addTwoNumbers
이벤트 초대
local ServerScriptService = game:GetService("ServerScriptService")-- 바인딩 가능한 함수에 대한 참조 얻기local bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")-- 콜백 함수 호출 및 반환된 값local sum = bindableFunction:Invoke(2, 4)print(sum) --> 6
인수 제한
Class.BindableEvent를 발생하거나 BindableFunction을 호출하면 이벤트나 콜백 함수에 패스하는 모든 인수를 전달합니다. Roblox 개체 (Enum 및 1>Class.Instance1> 등) 및 루아 형식
문자열이 아닌 인덱스
패스된 테이블의 인덱스가 문자열이 아닌 경우, 예를 들어 Class.Instance , Instance 또는 function 인 경우 Roblox는 이러한 인덱스를 문자열로 자동으로 변환합니다.
이벤트 연결
local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
local function onEventFire(passedTable)
for k, v in passedTable do
print(typeof(k)) --> 문자열
end
end
-- 이벤트에 함수 연결
bindableEvent.Event:Connect(onEventFire)
이벤트 발생
local ServerScriptService = game:GetService("ServerScriptService")local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")-- 작업 공간 인스턴스를 키로 포함하는 테이블이 있는 이벤트 발생bindableEvent:Fire({[workspace.Baseplate] = true})
테이블 인덱싱
데이터 테이블을 지나가면 키 값 쌍(사전)이 완전히 포함된 테이블을 지나가거나 키 값 쌍(사전)이 완전히 포함된 인덱스(배열)를 지나가는 것이 좋습니다. 대신, 키 값 쌍(사전)이 완전히 포함된 키 값 쌍(사전)이나 완전히 포함된 열 인덱스(배열)를 지나가는 것이 좋습니다.
이벤트 연결
local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
local function onEventFire(passedTable)
for k, v in passedTable do
print(k .. " = " .. v)
--> 1 = 검
--> 2 = 활
--> CharName = Diva 드래곤 레이어
--> CharClass = 도둑
end
end
-- 이벤트에 함수 연결
bindableEvent.Event:Connect(onEventFire)
이벤트 발생
local ServerScriptService = game:GetService("ServerScriptService")local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")-- 숫자 지정 테이블local inventoryData = {"Sword", "Bow"}-- 사전 테이블local characterData = {CharName = "Diva Dragonslayer",CharClass = "Rogue"}-- 일관된 인덱싱된 테이블과 함께 하는 화재 이벤트bindableEvent:Fire(inventoryData)bindableEvent:Fire(characterData)
테이블 식별자
바인딩된 이벤트 및 콜백에 대한 표를 바인딩할 때 사용자 지정 된 테이블이 복사됩니다. 이는 이벤트를 발생시키거나 콜백을 호출할 때 제공되는 것과 정확히 동일하지 않음을 의미합니다. 다음 스크립트를 실행하고 테이블이 인스턴스에 정확히 같지 않음을 확인
콜백 연결
local ServerScriptService = game:GetService("ServerScriptService")
local bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")
-- 콜백 함수
local function returnTable(passedTable)
-- 호출 시 테이블 식별자 출력
print(tostring(passedTable)) --> 테이블: 0x48eb7aead27563d9
return passedTable
end
-- 함수를 바인딩 함수 콜백으로 설정
bindableFunction.OnInvoke = returnTable
이벤트 초대
local ServerScriptService = game:GetService("ServerScriptService")local bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")local inventoryData = {"Sword", "Bow"}-- 원본 테이블 식별자 출력print(tostring(inventoryData)) --> 테이블: 0x059bcdbb2b576549local invokeReturn = bindableFunction:Invoke(inventoryData)-- 반환 시 테이블 식별자 출력print(tostring(invokeReturn)) --> table: 0x9fcae7919563a0e9
메타테이블
테이블에 메타테이블이 있으면 모든 메타테이블 정보가 전송에 손실됩니다. 다음 코드 샘플에서 NumWheels 속성은 Car 메타테이블의 일부입니다. 서버가 다음 테이블을 수
이벤트 연결
local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
local function onEvent(param)
print(param) --> { ["Name"] = "MyTruck"
end
-- 이벤트에 함수 연결
bindableEvent.Event:Connect(onEvent)
이벤트 발생
local ServerScriptService = game:GetService("ServerScriptService")local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")local Car = {}Car.NumWheels = 4Car.__index = Carlocal truck = {}truck.Name = "MyTruck"setmetatable(truck, Car)-- 메타테이블을 포함하는 테이블이 있는 테이블 이벤트 발생bindableEvent:Fire(truck)