경험을 상호 작용적으로 만드는 경우 개체 속성 및 특성을 조작하는 것이 종종 의미합니다.
속성은 개체 클래스의 일부입니다. 예를 들어, BasePart.Anchored 속성은 부품에 대한 물리학을 제어합니다. 트랙 및 필드 경험에서 디스크 또는 창을 즉시 앵커로 고정하여 플레이어가 시각적 표시로 부품이 얼마나 멀리 이동했는지 알 수 있습니다.
특성은 정의한 사용자 지정 속성입니다. 예를 들어, 식물 참조 프로젝트는 특성을 사용하여 씨앗 구매 가격과 화분이 들 수 있는 최대 식물 크기를 설정합니다.
복제 명령
개체를 복제하고 조작하기 전에 복제 순서를 이해해야 합니다.
Roblox 엔진은 서버에서 클라이언트로 복제되는 개체의 순서를 보장하지 않으므로 클라이언트 스크립트에서 개체에 액세스하려면 Instance:WaitForChild() 메서드가 필수적인 액세스 메서드입니다. 그러나 프로세스의 일부는 예측 가능합니다:
클라이언트는 ReplicatedFirst 의 콘텐츠, 로딩 화면, 자산 및 스크립트를 로드합니다.
LocalScripts (및 Scripts 와 RunContext 의 0> Class.Script.RunContext|RunContext0> 의 개체를 안전하게 가져올 수 있습니다
-- 금고local ReplicatedFirst = game:GetService("ReplicatedFirst")local LoadingScreen = require(ReplicatedFirst.LoadingScreen)이 스크립트는 다른 서비스에서 개체를 안전하게 가져올 수 없습니다, 왜냐하면 아직 로드되지 않았을 수 있기 때문입니다.
-- 안전하지 않음local ReplicatedStorage = game:GetService("ReplicatedStorage")local PickupManager = require(ReplicatedStorage.PickupManager)이 스크립트에서 개체를 다른 서비스에서 가져오려면 WaitForChild()를 사용할 수 있지만, 이렇게 하면 WaitForChild()의 이점이 크게 부정됩니다.
클라이언트는 나머지 경험 로드를 계속합니다.
완료되면 game.Loaded 이벤트가 발생하고 game:IsLoaded() 가 반환됩니다.
LocalScripts 는 StarterPlayerScripts 에서 실행되며, 클라이언트 Scripts 는 0> Class.ReplicatedStorage0> 에서 안전하게 개체를 가져올 수 있습니다. 이 스크립트는 3> StarterPlayerScript
플레이어의 Character 모델이 경험에 생성됩니다.
LocalScripts 에서 StarterCharacterScripts 로 실행.
경험에서 인스턴스 스트림을 사용하는 경우 클래스 작업 공간 스트림 (Workspace.StreamingEnabled), 일부 또는 대부분의 개체가 작업 공간에 로드되지 않으므로 사용 2> child를 사용하여 작업
개체 가져오기
개체 속성 및 특성을 수정하는 첫 번째 단계는 개체에 대한 참조를 얻는 것입니다. 가장 간단한 해결책은 스크립트를 탐색기의 자식으로 만들고 script.Parent 를 사용하여 참조하는 개체를 만드는 것입니다.
local sign = script.Parent
더 일반적인 해결책은 메서드 사용으로 개체를 서비스에서 얻는 것입니다. Class.Instance:FindFirstChild() 또는 Instance:FindFirstChild() 를 사용하여 개체를 서비스에서 얻을 수 있습니다.
local ReplicatedStorage = game:GetService("ReplicatedStorage")local signsFolder = ReplicatedStorage:WaitForChild("Signs")local sign = signsFolder:WaitForChild("InteractiveSign")
속성 변경
속성은 액세스가 간단합니다 — 개체 참조 후에 . 만 사용하면 됩니다 — 하지만 모델과 작업하는 경우 모델 자체가 아닌 개별 부품을 선택해야 할 수 있습니다.
local ReplicatedStorage = game:GetService("ReplicatedStorage")local chair = ReplicatedStorage:WaitForChild("Chair")chair.LeftArmRest.Size = Vector3.new(10, 1, 10)
특성 생성
프로그래밍 방식으로 특성을 만들 수는 있지만, 더 일반적인 솔루션은 Studio 사용자 인터페이스에서 기본 값으로 만드는 것입니다. 그런 다음 스크립트를 사용하여 플레이어 작업에 대한 응답으로 그 값을 변경할 수 있습니다.
Studio에서 특성을 생성하는 방법에 대한 자세한 내용은 인스턴스 특성 을 참조하십시오.
특성 설정
특성의 값을 수정하려면 Instance:SetAttribute()를 이름과 값으로 호출하십시오.
특성 생성 또는 수정
local cabbage = script.Parentcabbage:SetAttribute("Harvestable", true)
특성이 이미 없는 경우 이 메서드로 생성됩니다.
특성 값 가져오기
기존 특성의 값을 가져오려면 Instance:GetAttribute() 를 인스턴스에서 호출합니다.
특성 값 가져오기
local cabbage = script.Parentcabbage:SetAttribute("Harvestable", true)local isHarvestable = cabbage:GetAttribute("Harvestable")print(isHarvestable) --> true
마찬가지로, 모든 특성을 얻으려면 Instance:GetAttributes() 를 호출할 수 있습니다. 이 메서드는 키 값 쌍의 사전을 반환합니다.
모든 특성 가져오기
local cabbage = script.Parentlocal cabbageAttributes = cabbage:GetAttributes()print(cabbageAttributes.GrowthRate) --> 2for k, v in cabbageAttributes doprint(k, v)end
특성 삭제
특성을 삭제하려면 값을 일치하게 설정합니다.
특성 삭제
local cabbage = script.Parentcabbage:SetAttribute("GrowthRate", nil)
변경 사항 감지
속성 및 특성의 변경 내용을 듣기 위해 여러 가지 방법이 있습니다.
이벤트 Instance.Changed 목록은 모든 속성(특성)의 변경 내용을 감지하고 변경된 속성의 이름을 매개 변수로 전달합니다.
이벤트 Instance.AttributeChanged 목록은 모든 특성에 대한 변경 내용을 감지하고 변경된 특성의 이름을 매개 변수로 전달합니다.
Class.Instance:GetPropertyChangedSignal() 메서드를 사용하면 하나의 속성에 대한 변경 내용을 듣고 매개 변수를 전달하지 않습니다.
Class.Instance:GetAttributeChangedSignal() 메서드를 사용하면 하나의 특성에 대한 변경 내용을 듣고 매개 변수를 전달하지 않습니다.
이 이벤트 및 메서드가 매개 변수로 전달하는 최소한의 정보 때문에 모두 익명 함수에 적합하며, 특히 Instance:GetPropertyChangedSignal() 및 Instance:GetAttributeChangedSignal()입니다. 이벤트에 대해 자세히 알아보려면 이벤트를 참조하십시오.
변경 사항을 듣습니다
local cabbage = script.Parent
-- 로컬 함수
local function onAnyPropertyChange(property)
-- 특성에 변경 사항 무시
if property ~= "Attributes" then
print(property) --> 이름
print(cabbage[property]) --> 캐베이지1
end
end
local function onAnyAttributeChange(attribute)
print(attribute) --> 성장, 성장률
print(cabbage:GetAttribute(attribute)) --> false, 3
end
-- 변경 사항을 듣고 로컬 함수에 연결하십시오
cabbage.Changed:Connect(onAnyPropertyChange)
cabbage.AttributeChanged:Connect(onAnyAttributeChange)
-- 변경 사항을 듣고 익명 함수에 연결하십시오
cabbage:GetPropertyChangedSignal("Name"):Connect(function()
print(cabbage.Name) --> 캐베이지1
end)
cabbage:GetAttributeChangedSignal("GrowthRate"):Connect(function()
print(cabbage:GetAttribute("GrowthRate")) --> 3
end)
-- 변경된 화재 및 GetPropertyChangedSignal()
cabbage.Name = "Cabbage1"
-- 변경된 불 및 특성 변경
cabbage:SetAttribute("Grow", false)
-- 변경된 불, 특성 변경 및 GetAttributeChangedSignal()
cabbage:SetAttribute("GrowthRate", 3)