이벤트는 경험 내에서 수신하고 응답할 수 있는 발생 사건입니다.많은 Roblox 서비스와 개체에는 특정 작업이나 변경에 자동으로 발사하는 내장 이벤트가 있습니다.
예를 들어, 플레이어의 Character 가 BasePart 에 자동으로 터치하면 이벤트 Touched 가 발생합니다.플레이어가 경험에 참여할 때마다 Players.PlayerAdded 이벤트가 발생합니다.
이벤트와 클라이언트-서버 아키텍처의 엄청난 수로 인해 Roblox 스크립트는 종종 이벤트 구동 으로 언급됩니다.이 접근법은 프레임 단위 기반에서 코드를 실행하는 다른 많은 게임 엔진과 달라요.
이벤트를 수신하거나 응답으로 어떤 조치를 취할 필요가 없지만, 이벤트가 발생하고 여전히 사용할 수 있습니다.이벤트에 응답하려는 경우 해당 함수를 연결합니다.
함수를 이벤트에 연결하기
Connect()를 사용하여 함수를 이벤트에 연결하여 이벤트가 발생할 때마다 코드를 실행합니다.대부분의 이벤트는 연결된 함수에 인수를 전달합니다.예를 들어, BasePart.Touched 이벤트는 부품에 닿은 개체(예: 왼손이나 자동차 바퀴)를 전달하고, Players.PlayerAdded 이벤트는 경험에 참여한 Player를 전달합니다.
다음 코드 샘플은 onPartTouched()라는 함수를 부품의 Touched 이벤트에 연결하는 방법을 보여줍니다.
-- 스크립트가 부품에 부모로 지정된다고 가정합니다
local part = script.Parent
-- 실행하려는 함수
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- 함수를 부품의 터치 이벤트에 연결하십시오
part.Touched:Connect(onPartTouched)
부모 범위에서 변수를 사용하고 다른 곳에서 함수를 사용할 필요가 없을 때 익명 함수를 이벤트에 연결할 수도 있습니다.예를 들어, 이 코드 샘플은 서비스의 유사한 샘플에서 어색한 중간 기능을 피합니다.
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SaveManager = require(ReplicatedStorage:WaitForChild("SaveManager"))
local function saveProgress(character)
local position = character:FindFirstChild("HumanoidRootPart").Position
SaveManager.saveData(character, position)
end
-- 캐릭터가 제거될 때 saveProgress()를 호출하는 익명 함수
-- 경험(이 경우 플레이어가 떠날 때).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)
이벤트에서 기능 연결 해제
Connect() 메서드는 RBXScriptConnection 개체를 반환합니다.함수를 이벤트에 연결했지만 다음에 이벤트가 발생할 때 함수를 호출하지 않으려면 Disconnect() 개체에서 RBXScriptConnection 를 호출하여 연결을 해제하십시오.
다음 코드 샘플은 함수를 Part.Touched 이벤트에 연결하고 분리하는 방법을 보여줍니다:
local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local targetPart = Workspace.TargetPart
-- 연결에 대한 빈 플레이스홀더 변수 선언
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- 연결 해제
connection:Disconnect()
end
end
-- 위의 함수를 터치된 이벤트에 연결하십시오
connection = part.Touched:Connect(onPartTouched)
함수를 이벤트에 한 번만 연결하려는 경우 - 즉, 이벤트가 처음 발생할 때만 함수를 실행하려는 경우 - 함수를 연결하고 분리하는 데 더 편리한 방법으로 Once() 메서드를 사용하십시오.
이벤트 발생 대기
특정 이벤트가 발생할 때까지 스크립트를 생성하려면 Wait() 메서드를 사용하십시오.이 메서드는 나중에 변수에 할당할 수 있는 이벤트 인수를 반환합니다:
local Workspace = game:GetService("Workspace")local part = Workspace.Partlocal touchedPart = part.Touched:Wait()print("The part was touched by", touchedPart:GetFullName())
다른 유형의 이벤트
바인드 가능한 이벤트를 사용하면 클라이언트-서버 경계의 동일한 측면에서 스크립트 간에 통신할 수 있습니다 .
원격 이벤트를 사용하면 클라이언트-서버 경계를 통해 커뮤니케이션할 수 있습니다.