속성 및 특성

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

경험을 상호 작용적으로 만드는 경우 개체 속성 및 특성을 조작하는 것이 종종 의미합니다.

  • 속성은 개체 클래스의 일부입니다. 예를 들어, BasePart.Anchored 속성은 부품에 대한 물리학을 제어합니다. 트랙 및 필드 경험에서 디스크 또는 창을 즉시 앵커로 고정하여 플레이어가 시각적 표시로 부품이 얼마나 멀리 이동했는지 알 수 있습니다.

  • 특성은 정의한 사용자 지정 속성입니다. 예를 들어, 식물 참조 프로젝트는 특성을 사용하여 씨앗 구매 가격과 화분이 들 수 있는 최대 식물 크기를 설정합니다.

복제 명령

개체를 복제하고 조작하기 전에 복제 순서를 이해해야 합니다.

Roblox 엔진은 서버에서 클라이언트로 복제되는 개체의 순서를 보장하지 않으므로 클라이언트 스크립트에서 개체에 액세스하려면 Instance:WaitForChild() 메서드가 필수적인 액세스 메서드입니다. 그러나 프로세스의 일부는 예측 가능합니다:

  1. 클라이언트는 ReplicatedFirst 의 콘텐츠, 로딩 화면, 자산 및 스크립트를 로드합니다.

  2. LocalScripts (및 ScriptsRunContext 의 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()의 이점이 크게 부정됩니다.

  3. 클라이언트는 나머지 경험 로드를 계속합니다.

  4. 완료되면 game.Loaded 이벤트가 발생하고 game:IsLoaded() 가 반환됩니다.

  5. LocalScripts 는 StarterPlayerScripts 에서 실행되며, 클라이언트 Scripts 는 0> Class.ReplicatedStorage0> 에서 안전하게 개체를 가져올 수 있습니다. 이 스크립트는 3> StarterPlayerScript

  6. 플레이어의 Character 모델이 경험에 생성됩니다.

  7. LocalScripts 에서 StarterCharacterScripts 로 실행.

경험에서 인스턴스 스트림을 사용하는 경우 클래스 작업 공간 스트림 (Workspace.StreamingEnabled), 일부 또는 대부분의 개체가 작업 공간에 로드되지 않으므로 사용 2> child를 사용하여 작업

개체 가져오기

개체 속성 및 특성을 수정하는 첫 번째 단계는 개체에 대한 참조를 얻는 것입니다. 가장 간단한 해결책은 스크립트를 탐색기의 자식으로 만들고 script.Parent 를 사용하여 참조하는 개체를 만드는 것입니다.

A script parented to a model in the Explorer.

local sign = script.Parent

더 일반적인 해결책은 메서드 사용으로 개체를 서비스에서 얻는 것입니다. Class.Instance:FindFirstChild() 또는 Instance:FindFirstChild() 를 사용하여 개체를 서비스에서 얻을 수 있습니다.

A Model within a Folder in ReplicatedStorage.

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local signsFolder = ReplicatedStorage:WaitForChild("Signs")
local sign = signsFolder:WaitForChild("InteractiveSign")

속성 변경

속성은 액세스가 간단합니다 — 개체 참조 후에 . 만 사용하면 됩니다 — 하지만 모델과 작업하는 경우 모델 자체가 아닌 개별 부품을 선택해야 할 수 있습니다.

A Model within ReplicatedStorage.

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local chair = ReplicatedStorage:WaitForChild("Chair")
chair.LeftArmRest.Size = Vector3.new(10, 1, 10)

특성 생성

프로그래밍 방식으로 특성을 만들 수는 있지만, 더 일반적인 솔루션은 Studio 사용자 인터페이스에서 기본 값으로 만드는 것입니다. 그런 다음 스크립트를 사용하여 플레이어 작업에 대한 응답으로 그 값을 변경할 수 있습니다.

A script within a folder in ReplicatedStorage.

Studio에서 특성을 생성하는 방법에 대한 자세한 내용은 인스턴스 특성 을 참조하십시오.

특성 설정

특성의 값을 수정하려면 Instance:SetAttribute()를 이름과 값으로 호출하십시오.

특성 생성 또는 수정

local cabbage = script.Parent
cabbage:SetAttribute("Harvestable", true)

특성이 이미 없는 경우 이 메서드로 생성됩니다.

특성 값 가져오기

기존 특성의 값을 가져오려면 Instance:GetAttribute() 를 인스턴스에서 호출합니다.

특성 값 가져오기

local cabbage = script.Parent
cabbage:SetAttribute("Harvestable", true)
local isHarvestable = cabbage:GetAttribute("Harvestable")
print(isHarvestable) --> true

마찬가지로, 모든 특성을 얻으려면 Instance:GetAttributes() 를 호출할 수 있습니다. 이 메서드는 키 값 쌍의 사전을 반환합니다.

모든 특성 가져오기

local cabbage = script.Parent
local cabbageAttributes = cabbage:GetAttributes()
print(cabbageAttributes.GrowthRate) --> 2
for k, v in cabbageAttributes do
print(k, v)
end

특성 삭제

특성을 삭제하려면 값을 일치하게 설정합니다.

특성 삭제

local cabbage = script.Parent
cabbage: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)