이벤트는 경험 내에서 듣고 응답할 수 있는 경우가 많은 Roblox 서비스 및 개체의 내장 이벤트입니다. 많은 Roblox 서비스 및 개체에는 특정 액션 또는 변경에 대한 자동 반응을 위해 내장된 이벤트가 있습니다.
예를 들어, 플레이어가 Character 을 만질 때 BasePart 자동으로 Touched 이벤트를 발생시킵니다. 플레이어가 경험에 참여할 때마다 2>Class.Players.PlayerAdded2> 이벤트가 발생합니다.
이벤트 수가 많고 클라이언트-서버 아키텍처 때문에 Roblox 스크립트는 종종 이벤트 기반 로 참조됩니다. 이 접근 방식은 다른 많은 게임 엔진과 달리 프레임 기반으로 코드를 실행하는 것을 강조합니다.
이벤트에 귀 기울이거나 응답하는 것은 필요 없지만, 이벤트가 발생하고 사용자에게 사용 가능합니다. 이벤트에 응답하려면 함수를 연결하십시오.
함수 연결 이벤트
이벤트에서 코드를 실행하려면 Connect() 를 사용하여 이벤트마다 코드를 실행합니다. 대부분의 이벤트는 아규먼트를 연결된 함수에 전달하므로 참조하십시오.
다음 코드 샘플은 부품의 이벤트에 함수 이름이 onPartTouched() 인 함수를 연결하는 방법을 보여줍니다.
-- 스크립트가 부모인 부품에 속해야 합니다.
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)
이벤트에서 함수 연결 해제
Datatype.RBXScriptSignal.Connect()|Connect() 메서드는 RBXScriptConnection 개체를 반환합니다. 이 메서드는 이벤트에 함수를 연결하지만 다음에 이벤트가 발생할 때 함수를 호출하지 않도록 하
다음 코드 샘플은 함수를 Class.BasePart.Touched|Part.Touched 이벤트에 연결하고 해제하는 방법을 보여줍니다.
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 part = workspace.Partlocal touchedPart = part.Touched:Wait()print("The part was touched by", touchedPart:GetFullName())
다른 종류의 이벤트
결속 가능한 이벤트는 클라이언트-서버 경계의 양쪽에 있는 스크립트 사이를 통신할 수 있습니다.
원격 이벤트는 클라이언트-서버 경계 간에 통신 할 수 있습니다.