BasePart

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

無法建立
無法瀏覽

Class.BasePart 是一個抽象的基

有關 BaseParts 如何組成模擬的剛體,請參閱 組合體

有很多不同的對象互相交互 BasePart (除了 Terrain 之外),包括:

概要

屬性

屬性 繼承自 PVInstance

方法

方法 繼承自 PVInstance

活動

屬性

Anchored

平行讀取

錨定 屬性決定 whether 零件會否以物理學方法移動。當啟用時,零件將不會因重力、其他零件碰撞、交叉其他零件或其他物理相關原因而改變位置。因結果,兩個錨定零件將不會發生 BasePart.Touched 對彼此。

錨定的零件仍然可以通過變更其 CFramePosition 來移動,並且仍然可以有非零 AssemblyLinearVelocity 和 1> Class.BasePart.AssemblyAngularVelocity|AssemblyAngularVelocity1>

最後,如果未錨定的零件與錨定的零件通過對象,如 Weld ,它也會作為錨定的零件。如果此類零件被斷斷,零件可能會再次受到物理學影響。請參閱 裝配 了解更多詳情。

網路擁有者無法設定在錨定零件上。如果服務伺服器上的零件狀態發生變更,該零件的網路擁有者將會受影響。

範例程式碼

Part Anchored Toggle

local part = script.Parent
-- Create a ClickDetector so we can tell when the part is clicked
local cd = Instance.new("ClickDetector", part)
-- This function updates how the part looks based on its Anchored state
local function updateVisuals()
if part.Anchored then
-- When the part is anchored...
part.BrickColor = BrickColor.new("Bright red")
part.Material = Enum.Material.DiamondPlate
else
-- When the part is unanchored...
part.BrickColor = BrickColor.new("Bright yellow")
part.Material = Enum.Material.Wood
end
end
local function onToggle()
-- Toggle the anchored property
part.Anchored = not part.Anchored
-- Update visual state of the brick
updateVisuals()
end
-- Update, then start listening for clicks
updateVisuals()
cd.MouseClick:Connect(onToggle)

AssemblyAngularVelocity

未複製
平行讀取

這個零件的組裝的角速度矢量。它是每秒鐘的角度變化速度的百分比。

角度速度在整個裝配過程中保持一致。

將速度直接設置可能會導致不實的動作。使用 TorqueAngularVelocity 限制是最佳選擇,或使用 BasePart:ApplyAngularImpulse() 如果您想要即時變更速度。

如果零件是由服務伺服器擁有的話,這個屬性必須從服務器 Script (不是從 Class

AssemblyCenterOfMass

唯讀
未複製
平行讀取

一個位置計算通過 massposition 的所有零件在裝配中的所有零件。

如果裝配有錨定的零件,那零件的中心將是裝配的中心,裝配將擁有無限的零件。

知道中心的 масс可以幫助裝配保持穩定。 對 масс中心施加的力量不會導致角度加速,只是線性。 有低中心的 масс裝配將會在重力效果下保持良好的時間。

AssemblyLinearVelocity

未複製
平行讀取

這個零件的裝配中的直線速度量值。它是裝配中的 center of mass 的速度變化率。

如果您想知道在裝配中心以外的任何時點的速度,請使用 BasePart:GetVelocityAtPosition()

將速度直接設置可能會導致不實的動作。使用 VectorForce 限制是最佳選擇,或使用 BasePart:ApplyImpulse() 如果您想要即時變更速度。

如果零件是由服務伺服器擁有的話,這個屬性必須從服務器 Script (不是從 Class

AssemblyMass

唯讀
未複製
平行讀取

此部分的組裝包含所有 parts 的 масс。零件如果是 Massless 而不是組裝的根部分,將不會儲存在組裝體中。

如果裝配有錨定的零件,裝配的 mass 將被視為無限。限制和其他物理互動,可能導致 instabilities。

AssemblyRootPart

唯讀
未複製
平行讀取

此屬性表示 BasePart 自動選擇代表裝置的根部分。 它是與開發人員呼叫 GetRootPart() 相同的部分。

Class.BasePart.RootPriority|RootPriority 可以改變組合中的零件的 Class.BasePart.RootPriority|RootPriority 。

所有分享相同裝配根的零件都在相同的裝配中。

有關根部分的更多資訊,請參閱 裝配式零件

BackSurface

平行讀取

BackSurface 屬性決定零件的 +Z 方向使用的表面類型。當兩個零件的面向放置在一起時,它們可能會創建一個共同的表面。如果設為「Motor」,BasePart.BackSurfaceInput 將決定零件的動力關係。

大多數表面類型會在零件面上渲染一個紋理,如果 BasePart.Material 設為「塑膠」,那麼一些表面類型 - 關節、電機和步驅馬達 - 會在遊戲世界中呈現 3D 裝飾。如果此屬性在 SurfaceSelection 視窗中選取,它會與 Class.Surface

範例程式碼

Show All SurfaceTypes

local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end

BottomSurface

平行讀取

底表面屬性決定零件的-Y方向使用的表面類型。當兩個零件的面向放置在一起時,它們可能會創建一個共同的表面。如果設為「Motor」,BasePart.BottomSurfaceInput 將決定發動機的關閉方式。

大多數表面類型會在零件面上渲染一個紋理,如果 BasePart.Material 設為「塑膠」,那麼一些表面類型 - 關節、電機和步驅馬達 - 會在遊戲世界中呈現 3D 裝飾。如果此屬性在 SurfaceSelection 視窗中選取,它會與 Class.Surface

範例程式碼

Show All SurfaceTypes

local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end

BrickColor

未複製
平行讀取

BrickColor 屬性決定零件的顏色。如果零件有 BasePart.Material,這也會決定在渲染材料紋理時使用的顏色。對於更多控制顏色的方式,BasePart.Color 屬性可以使用 (它是 Color3 變體的此屬性)。如果設定顏色, Class.Base

零件的其他視覺特性是由 BasePart.TransparencyBasePart.Reflectance 決定。

範例程式碼

Part Anchored Toggle

local part = script.Parent
-- Create a ClickDetector so we can tell when the part is clicked
local cd = Instance.new("ClickDetector", part)
-- This function updates how the part looks based on its Anchored state
local function updateVisuals()
if part.Anchored then
-- When the part is anchored...
part.BrickColor = BrickColor.new("Bright red")
part.Material = Enum.Material.DiamondPlate
else
-- When the part is unanchored...
part.BrickColor = BrickColor.new("Bright yellow")
part.Material = Enum.Material.Wood
end
end
local function onToggle()
-- Toggle the anchored property
part.Anchored = not part.Anchored
-- Update visual state of the brick
updateVisuals()
end
-- Update, then start listening for clicks
updateVisuals()
cd.MouseClick:Connect(onToggle)

CFrame

平行讀取

CFrame 屬性決定了 Class.BasePart 在世界上的位置和方向。它作為對象上的任意引用位置,但 BasePart 代表其實際 ExtentsCFrame 的中心。

當在零件上設置 CFrame 時,其他已加入的零件也會相對於零件移動,但建議您使用 PVInstance:PivotTo() 來移動整個模型,例如傳送玩家角色時。

與設置 BasePart.Position 不同,設置 BasePart.CFrame 將始終將零件移動到正確的 CFrame ;即其他言語:1> 沒有交叉檢查1> ,且物理解決器將嘗試解決任何交叉檢查,

為了跟蹤位置相對於零件的 CFrameAttachment 可能會很有用。

範例程式碼

Setting Part CFrame

local part = script.Parent:WaitForChild("Part")
local otherPart = script.Parent:WaitForChild("OtherPart")
-- Reset the part's CFrame to (0, 0, 0) with no rotation.
-- This is sometimes called the "identity" CFrame
part.CFrame = CFrame.new()
-- Set to a specific position (X, Y, Z)
part.CFrame = CFrame.new(0, 25, 10)
-- Same as above, but use a Vector3 instead
local point = Vector3.new(0, 25, 10)
part.CFrame = CFrame.new(point)
-- Set the part's CFrame to be at one point, looking at another
local lookAtPoint = Vector3.new(0, 20, 15)
part.CFrame = CFrame.lookAt(point, lookAtPoint)
-- Rotate the part's CFrame by pi/2 radians on local X axis
part.CFrame = part.CFrame * CFrame.Angles(math.pi / 2, 0, 0)
-- Rotate the part's CFrame by 45 degrees on local Y axis
part.CFrame = part.CFrame * CFrame.Angles(0, math.rad(45), 0)
-- Rotate the part's CFrame by 180 degrees on global Z axis (note the order!)
part.CFrame = CFrame.Angles(0, 0, math.pi) * part.CFrame -- Pi radians is equal to 180 degrees
-- Composing two CFrames is done using * (the multiplication operator)
part.CFrame = CFrame.new(2, 3, 4) * CFrame.new(4, 5, 6) --> equal to CFrame.new(6, 8, 10)
-- Unlike algebraic multiplication, CFrame composition is NOT communitative: a * b is not necessarily b * a!
-- Imagine * as an ORDERED series of actions. For example, the following lines produce different CFrames:
-- 1) Slide the part 5 units on X.
-- 2) Rotate the part 45 degrees around its Y axis.
part.CFrame = CFrame.new(5, 0, 0) * CFrame.Angles(0, math.rad(45), 0)
-- 1) Rotate the part 45 degrees around its Y axis.
-- 2) Slide the part 5 units on X.
part.CFrame = CFrame.Angles(0, math.rad(45), 0) * CFrame.new(5, 0, 0)
-- There is no "CFrame division", but instead simply "doing the inverse operation".
part.CFrame = CFrame.new(4, 5, 6) * CFrame.new(4, 5, 6):Inverse() --> is equal to CFrame.new(0, 0, 0)
part.CFrame = CFrame.Angles(0, 0, math.pi) * CFrame.Angles(0, 0, math.pi):Inverse() --> equal to CFrame.Angles(0, 0, 0)
-- Position a part relative to another (in this case, put our part on top of otherPart)
part.CFrame = otherPart.CFrame * CFrame.new(0, part.Size.Y / 2 + otherPart.Size.Y / 2, 0)

CanCollide

平行讀取

CanCollide 可以決定零件是否與其他零件物理上互相作用。當啟用關閉時,其他零件將穿過磚塊,無需考慮物理引擎。一般來說, 裝飾 零件通常會啟用 CanCollide 關閉,因為它們不需要被物理引擎考慮。

如果零件未BasePart.Anchored,並且CanCollide已禁用,它可能會在世界上遭到擊毀,最終被Workspace.FallenPartsDestroyHeight摧毀。

停用時,零件可能會發生 BasePart.Touched 事件 (包括其他零件也一樣)。您可以使用 BasePart.CanTouch 來禁用此情況。

有關碰撞的更多資訊,請參閱 碰撞

範例程式碼

Fade Door

-- Paste into a Script inside a tall part
local part = script.Parent
local OPEN_TIME = 1
-- Can the door be opened at the moment?
local debounce = false
local function open()
part.CanCollide = false
part.Transparency = 0.7
part.BrickColor = BrickColor.new("Black")
end
local function close()
part.CanCollide = true
part.Transparency = 0
part.BrickColor = BrickColor.new("Bright blue")
end
local function onTouch(otherPart)
-- If the door was already open, do nothing
if debounce then
print("D")
return
end
-- Check if touched by a Humanoid
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if not human then
print("not human")
return
end
-- Perform the door opening sequence
debounce = true
open()
task.wait(OPEN_TIME)
close()
debounce = false
end
part.Touched:Connect(onTouch)
close()

CanQuery

平行讀取

CanQuery 可以決定零件是否在空間查詢操作中考慮,例如 GetPartBoundsInBoxRaycastCanCollide 必須也被禁用,當禁用 CanQuery 時。這些功能將永遠不包含其 Can

除此屬性外,也可以使用 OverlapParamsRaycastParams 對象來排除從指定列表中的零件,當呼叫空間查詢函數。

CanTouch

平行讀取

此屬性決定 whether Class.BasePart.Touched|

注意,此衝突邏輯可以通過 Class.Workspace.TouchesUseCollisionGroups 屬性設置為尊重 Workspace.TouchesUseCollisionGroups 。如果 true 是,非協調群組中的零件將無視協調事件 2>和2> ,因此此屬性無效。

性能

當有 CanTouchCanCollide 設為 false 時,這些零件將永遠不需要計算任何類型的零件碰撞。但是,它們仍然可

CastShadow

平行讀取

是否啟用或否啟用零件的暗影。

注意,此功能不是為了 增強性能 設計的。它只應該在你想要隱藏零件所帶來的陰影所以在零件上禁用此屬性。對於某個零件啟用此屬性可能會導致視覺上的藝術效果在零件上 cast 在零件上 cast 上 cast。

CenterOfMass

唯讀
未複製
平行讀取

中心的質量屬性描述零件的中心質量位置。如果這是單一零件的組合,這是從世界空間轉換到本地的 AssemblyCenterOfMass 。對於簡單的 AssemblyCenterOfMass ,中心的質量通常是 0,0

CollisionGroup

未複製
平行讀取

Class.BasePart.CollisionGroup|CollisionGroup 屬性描述零件的衝突群組的名稱 (最多 100 個字元)。零件從預設群組開始 (最多 5 個字元) 。此值無法為空。

雖然此屬性本身不是複製,但引擎會內部重複值以解決後端兼容問題。

範例程式碼

PhysicsService:RegisterCollisionGroup

local PhysicsService = game:GetService("PhysicsService")
local collisionGroupBall = "CollisionGroupBall"
local collisionGroupDoor = "CollisionGroupDoor"
-- Register collision groups
PhysicsService:RegisterCollisionGroup(collisionGroupBall)
PhysicsService:RegisterCollisionGroup(collisionGroupDoor)
-- Assign parts to collision groups
script.Parent.BallPart.CollisionGroup = collisionGroupBall
script.Parent.DoorPart.CollisionGroup = collisionGroupDoor
-- Set groups as non-collidable with each other and check the result
PhysicsService:CollisionGroupSetCollidable(collisionGroupBall, collisionGroupDoor, false)
print(PhysicsService:CollisionGroupsAreCollidable(collisionGroupBall, collisionGroupDoor)) --> false

Color

未複製
平行讀取

顏色屬性決定零件的顏色。如果零件有 BasePart.Material,這也會決定在渲染材料紋理時使用的顏色。如果此屬性設定,BasePart.BrickColor 將使用最接近的 BrickColor 來決定材料的顏色。

零件的其他視覺特性是由 BasePart.TransparencyBasePart.Reflectance 決定。

範例程式碼

Character Health Body Color

-- Paste into a Script within StarterCharacterScripts
-- Then play the game, and fiddle with your character's health
local char = script.Parent
local human = char.Humanoid
local colorHealthy = Color3.new(0.4, 1, 0.2)
local colorUnhealthy = Color3.new(1, 0.4, 0.2)
local function setColor(color)
for _, child in pairs(char:GetChildren()) do
if child:IsA("BasePart") then
child.Color = color
while child:FindFirstChildOfClass("Decal") do
child:FindFirstChildOfClass("Decal"):Destroy()
end
elseif child:IsA("Accessory") then
child.Handle.Color = color
local mesh = child.Handle:FindFirstChildOfClass("SpecialMesh")
if mesh then
mesh.TextureId = ""
end
elseif child:IsA("Shirt") or child:IsA("Pants") then
child:Destroy()
end
end
end
local function update()
local percentage = human.Health / human.MaxHealth
-- Create a color by tweening based on the percentage of your health
-- The color goes from colorHealthy (100%) ----- > colorUnhealthy (0%)
local color = Color3.new(
colorHealthy.R * percentage + colorUnhealthy.r * (1 - percentage),
colorHealthy.G * percentage + colorUnhealthy.g * (1 - percentage),
colorHealthy.B * percentage + colorUnhealthy.b * (1 - percentage)
)
setColor(color)
end
update()
human.HealthChanged:Connect(update)

CurrentPhysicalProperties

唯讀
未複製
平行讀取

當前物理屬性指示零件的當前物理屬性。您可以為零件設置自訂物理屬性的價值,自訂材料,和材料覆寫。引擎以最高優先權設定更粒細的定義,當決定零件的實際物理屬性時,值在以下列表中的順序是:

  • 零件的自訂物理屬性
  • 零件自訂材料的自訂物理屬性
  • 自訂物理屬性的零件材料上覆蓋了零件材料的物理屬性
  • 零件材料的預設物理屬性

CustomPhysicalProperties

平行讀取

CustomPhysicalProperties 允許您自訂 Part 的各個物理特性,例如它的密度、摩擦力和彈性。

啟用此屬性可讓您設定這些物理屬性。如果停用,這些物理屬性將被 BasePart.Material 的零件決定。頁面 Enum.Material 包含各種零件材料的列表。

範例程式碼

Set CustomPhysicalProperties

local part = script.Parent
-- This will make the part light and bouncy!
local DENSITY = 0.3
local FRICTION = 0.1
local ELASTICITY = 1
local FRICTION_WEIGHT = 1
local ELASTICITY_WEIGHT = 1
local physProperties = PhysicalProperties.new(DENSITY, FRICTION, ELASTICITY, FRICTION_WEIGHT, ELASTICITY_WEIGHT)
part.CustomPhysicalProperties = physProperties

EnableFluidForces

平行讀取

Workspace.FluidForces 啟用時,和 BasePart 啟用時,導致物理引擎對此 Class.BasePart 計算氣動力學力。

ExtentsCFrame

唯讀
未複製
平行讀取

Class.BasePart 的物理部分的 BasePart,代表其物理中心。

ExtentsSize

唯讀
未複製
平行讀取

Class.BasePart 的實際物理尺寸,與物理引擎觀點,例如在 衝突偵測 中。

FrontSurface

平行讀取

FrontSurface 屬性決定零件的 -Z 方向使用的表面類型。當兩個零件的面向放置在一起時,它們可能會創建一個共同的表面。如果設為「Motor」,BasePart.FrontSurfaceInput 將決定零件的動力關係。

如果 BasePart.Material 設為「塑膠」,大多數表面類型都會在零件面上渲染紋理。一些表面類型包括螺柱、發動機和步驟電機,會在遊戲世界中與 SurfaceSelection 的外觀相似。如果在屬性窗口中選擇此屬性,它會在遊戲

範例程式碼

Show All SurfaceTypes

local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end

LeftSurface

平行讀取

LeftSurface 屬性決定零件的 -X 方向使用的表面類型。當兩個零件的面向放置在一起時,它們可能會創建一個共同的表面。如果設為「Motor」,Class.BasePart.LeftSurfaceInput 將決定零件的共同行為。

如果 BasePart.Material 設為「塑膠」,大多數表面類型都會在零件面上渲染紋理。一些表面類型包括螺柱、發動機和步驟電機,會在遊戲世界中與 SurfaceSelection 的外觀相似。如果在屬性窗口中選擇此屬性,它會在遊戲

範例程式碼

Show All SurfaceTypes

local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end

LocalTransparencyModifier

隱藏
未複製
平行讀取

Class.BasePart.LocalTransparency 屬性是 BasePart.Transparency 的乘數,只對本地客戶端可見。它不會從客戶端複製到伺服器,並且對於正在為特定客戶端無法渲染的情況下有幫助,例如玩家在第一人稱模式下不能看到其角色的身體部分。

這個屬性會通過下列方程式變更本地零件的透明度,結果將會在 0 和 1 之間壓扁。


clientTransparency = 1 - ((1 - part.Transparency) * (1 - part.LocalTransparencyModifier))

<tbody>
<tr>
<td>0.5</td>
<td>0</td>
<td>0.5</td>
<td>0.5</td>
</tr>
<tr>
<td>0.5</td>
<td>0.25</td>
<td>0.5</td>
<td>0.625</td>
</tr>
<tr>
<td>0.5</td>
<td>0.5</td>
<td>0.5</td>
<td>0.75</td>
</tr>
<tr>
<td>0.5</td>
<td>0.75</td>
<td>0.5</td>
<td>0.875</td>
</tr>
<tr>
<td>0.5</td>
<td>1</td>
<td>0.5</td>
<td>1</td>
</tr>
</tbody>
透明度本地透明度模組伺服器側透明度客戶端透明度

Locked

平行讀取

Class.BasePart|part (或 model 它是否在 Roblox Studio 中因為單擊它而選擇) 是否在 Roblox Studio 中啟用鎖定狀態的Class.BasePart|part (或在模型中的1> Class.Model|model1> )是否選擇。此屬性通常在

範例程式碼

Recursive Unlock

-- Paste into a Script within a Model you want to unlock
local model = script.Parent
-- This function recurses through a model's heirarchy and unlocks
-- every part that it encounters.
local function recursiveUnlock(object)
if object:IsA("BasePart") then
object.Locked = false
end
-- Call the same function on the children of the object
-- The recursive process stops if an object has no children
for _, child in pairs(object:GetChildren()) do
recursiveUnlock(child)
end
end
recursiveUnlock(model)

Mass

唯讀
未複製
平行讀取

Mass 是一個只讀的屬性,用於描述零件的音量和密度。它由 GetMass 函數返回。

  • 零件的音量由其 Size 和其 Shape 決定,這取決於使用的 BasePart 種類,例如 WedgePart
  • 零件的密度是由其 MaterialCustomPhysicalProperties 決定。 如果指定,則密度會取決於零件的 Class.BasePart.Material|Material 或 1> Class.BasePart.CustomPhysicalProperties|CustomPhysicalProperties1>。

Massless

平行讀取

如果此屬性啟用,BasePart 將不會在其裝配的總質量或穩定性上貢獻,直到它被焊接到另一個具有質量的零件。

如果零件是 AssemblyRootPart 的根部分,這將對該零件無視,它仍會為其提供組裝貢獻,像其他零件一樣。無論零件是否為零件,它們都不會成為組裝根部分,直到所有零件都成為零件,直到所有零件都成為零件,直到所有零件都成為零件,直到所有零件都成為零件,直到所有零件都成

這可能有助於像車輛上的可選配件在您不想影響車輛操作性的情況下進行處網格。

也參閱 組合體 ,這是一個文章,記錄根零件是什麼,以及如何使用它們。

平行讀取

材料屬性允許建造者設置零件的材質和預設物理屬性(如果 BasePart.CustomPhysicalProperties 是未設紋理的情況下)。 預設塑膠材料有很輕的材質,而 SmoothPlastic 材料沒有任何材質。一些材質結構,例如 DiamondPlate 和 Granite ,具有非常可見的材

設置此屬性,然後啟用 BasePart.CustomPhysicalProperties 會使用材料的預設物理屬性。例個體、實例,DiamondPlate是一種很鬆的材料,而 Wood 是很輕的材料。一個零件的密度將決定它在地形水中漂浮的否定。

玻璃材料會在中等圖形設定下變更渲染行為。它會在一些反射性 (類似於 BasePart.Reflectance 和視角扭曲) 和玻璃部分的圖像。效果在球形零件 (將 Class.BasePart.Shape 設置為 Ball) 上尤為明顯。半透明物體和玻璃部分在玻璃後的玻璃部分不

範例程式碼

Part Anchored Toggle

local part = script.Parent
-- Create a ClickDetector so we can tell when the part is clicked
local cd = Instance.new("ClickDetector", part)
-- This function updates how the part looks based on its Anchored state
local function updateVisuals()
if part.Anchored then
-- When the part is anchored...
part.BrickColor = BrickColor.new("Bright red")
part.Material = Enum.Material.DiamondPlate
else
-- When the part is unanchored...
part.BrickColor = BrickColor.new("Bright yellow")
part.Material = Enum.Material.Wood
end
end
local function onToggle()
-- Toggle the anchored property
part.Anchored = not part.Anchored
-- Update visual state of the brick
updateVisuals()
end
-- Update, then start listening for clicks
updateVisuals()
cd.MouseClick:Connect(onToggle)

MaterialVariant

未複製
平行讀取

系統會搜尋 MaterialVariant 實例以指定的 Materiallean 名稱和 BasePart.Material 輸入型。如果成功找到符合的 Materiallean 實個體、實例,它會使用此 Materiallean 實例來替換預設材料。預設材料可以是內置材料或指定的 Materiallean 類型。

Orientation

隱藏
未複製
平行讀取

方向描述用 Vector3 在 X、Y 和 Z 軸上旋轉方向的程度。旋轉是以 Y → X → Z 的順序應用。這與正確的

當設定此屬性任何 WeldsMotor6Ds 連接到此零件時,將有相應的 C0 或 1> Class.JointInstance.C1|C11> ��

WeldConstraints 也會在移動工具動時暫時關閉並重新啟用。

範例程式碼

Part Spinner

local part = script.Parent
local INCREMENT = 360 / 20
-- Rotate the part continually
while true do
for degrees = 0, 360, INCREMENT do
-- Set only the Y axis rotation
part.Rotation = Vector3.new(0, degrees, 0)
-- A better way to do this would be setting CFrame
--part.CFrame = CFrame.new(part.Position) * CFrame.Angles(0, math.rad(degrees), 0)
task.wait()
end
end

PivotOffset

平行讀取

此屬性指定零件的中心點偏移,其中 CFramepart:GetPivot()part.CFrame * part.PivotOffset 相同。

這很方便設置槽針位置在 本地 空間,但將零件的槽針設置在 世界 空間可以執行以下操作:


local part = workspace.BluePart
local desiredPivotCFrameInWorldSpace = CFrame.new(0, 10, 0)
part.PivotOffset = part.CFrame:ToObjectSpace(desiredPivotCFrameInWorldSpace)

範例程式碼

Reset Pivot

local function resetPivot(model)
local boundsCFrame = model:GetBoundingBox()
if model.PrimaryPart then
model.PrimaryPart.PivotOffset = model.PrimaryPart.CFrame:ToObjectSpace(boundsCFrame)
else
model.WorldPivot = boundsCFrame
end
end
resetPivot(script.Parent)
Clock Hands

local function createHand(length, width, yOffset)
local part = Instance.new("Part")
part.Size = Vector3.new(width, 0.1, length)
part.Material = Enum.Material.Neon
part.PivotOffset = CFrame.new(0, -(yOffset + 0.1), length / 2)
part.Anchored = true
part.Parent = workspace
return part
end
local function positionHand(hand, fraction)
hand:PivotTo(CFrame.fromEulerAnglesXYZ(0, -fraction * 2 * math.pi, 0))
end
-- Create dial
for i = 0, 11 do
local dialPart = Instance.new("Part")
dialPart.Size = Vector3.new(0.2, 0.2, 1)
dialPart.TopSurface = Enum.SurfaceType.Smooth
if i == 0 then
dialPart.Size = Vector3.new(0.2, 0.2, 2)
dialPart.Color = Color3.new(1, 0, 0)
end
dialPart.PivotOffset = CFrame.new(0, -0.1, 10.5)
dialPart.Anchored = true
dialPart:PivotTo(CFrame.fromEulerAnglesXYZ(0, (i / 12) * 2 * math.pi, 0))
dialPart.Parent = workspace
end
-- Create hands
local hourHand = createHand(7, 1, 0)
local minuteHand = createHand(10, 0.6, 0.1)
local secondHand = createHand(11, 0.2, 0.2)
-- Run clock
while true do
local components = os.date("*t")
positionHand(hourHand, (components.hour + components.min / 60) / 12)
positionHand(minuteHand, (components.min + components.sec / 60) / 60)
positionHand(secondHand, components.sec / 60)
task.wait()
end

Position

隱藏
未複製
平行讀取

位置屬性描述使用 Vector3 的位置來表示 BasePart.CFrame 的坐標。它反映 1> Class.BasePart.CFrame1> 的位置,但也可以設設定。

當設定此屬性任何 WeldsMotor6Ds 連接到此零件時,將有相應的 C0 或 1> Class.JointInstance.C1|C11> ��

WeldConstraints 也會在移動工具動時暫時關閉並重新啟用。

ReceiveAge

隱藏
唯讀
未複製
平行讀取

這會將零件的物理學模型更新為本地客戶 (或伺服器) 上最後更新的時間 (秒) 。 如果零件沒有物理學模型,則會返回 0 (已錨定)

Reflectance

平行讀取

反射率屬性決定part反射天空盒的程度。值 0 表示零,值 1 表示完全反射。

反射率不會受到 BasePart.Transparency 的影響,除非零件完全透明,否則反射率將不全部 所有渲染。反射率可能會或不會被忽略,取決於零件的 BasePart.Material

範例程式碼

Touch Blink

local part = script.Parent
local pointLight = Instance.new("PointLight")
pointLight.Brightness = 0
pointLight.Range = 12
pointLight.Parent = part
local touchNo = 0
local function blink()
-- Advance touchNo to tell other blink() calls to stop early
touchNo = touchNo + 1
-- Save touchNo locally so we can tell when it changes globally
local myTouchNo = touchNo
for i = 1, 0, -0.1 do
-- Stop early if another blink started
if touchNo ~= myTouchNo then
break
end
-- Update the blink animation
part.Reflectance = i
pointLight.Brightness = i * 2
task.wait(0.05)
end
end
part.Touched:Connect(blink)

ResizeIncrement

唯讀
未複製
平行讀取

大小增量屬性是一個只讀取的屬性,描述 BasePart:Resize() 方法可以允許的最小變更。它與 BasePart 抽象類型不同。例個體、實例, Part 有此設置為 1 和 1>Class.TrussPart

範例程式碼

Resize Handles

-- Put this Script in several kinds of BasePart, like
-- Part, TrussPart, WedgePart, CornerWedgePart, etc.
local part = script.Parent
-- Create a handles object for this part
local handles = Instance.new("Handles")
handles.Adornee = part
handles.Parent = part
-- Manually specify the faces applicable for this handle
handles.Faces = Faces.new(Enum.NormalId.Top, Enum.NormalId.Front, Enum.NormalId.Left)
-- Alternatively, use the faces on which the part can be resized.
-- If part is a TrussPart with only two Size dimensions
-- of length 2, then ResizeableFaces will only have two
-- enabled faces. For other parts, all faces will be enabled.
handles.Faces = part.ResizeableFaces

ResizeableFaces

唯讀
未複製
平行讀取

ResizeableFaces 屬性 (與 e ,不是 ResizableFaces ) 描述使用 Faces 對象在哪些面

範例程式碼

Resize Handles

-- Put this Script in several kinds of BasePart, like
-- Part, TrussPart, WedgePart, CornerWedgePart, etc.
local part = script.Parent
-- Create a handles object for this part
local handles = Instance.new("Handles")
handles.Adornee = part
handles.Parent = part
-- Manually specify the faces applicable for this handle
handles.Faces = Faces.new(Enum.NormalId.Top, Enum.NormalId.Front, Enum.NormalId.Left)
-- Alternatively, use the faces on which the part can be resized.
-- If part is a TrussPart with only two Size dimensions
-- of length 2, then ResizeableFaces will only have two
-- enabled faces. For other parts, all faces will be enabled.
handles.Faces = part.ResizeableFaces

RightSurface

平行讀取

RightSurface 屬性決定零件的 +X 方向使用的表面類型。當兩個零件的面向放置在一起時,它們可能會創建一個關係。如果設為「Motor」,BasePart.RightSurfaceInput 將決定引擎的關係。

如果 BasePart.Material 設為「塑膠」,大多數表面類型都會在零件面上渲染紋理。一些表面類型包括螺柱、發動機和步驟電機會在遊戲世界中類似於 SurfaceSelection 的 3D 裝飾。如果此屬性在 Property

範例程式碼

Show All SurfaceTypes

local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end

RootPriority

平行讀取

此屬性是 -127 和 127 之間的整數,取得優先權於所有其他規則對於根部分排序。當考慮多個不是 Anchored 和共享相同 Massless 值的部分時,會優先於 Root

您可以使用此屬性來控制裝配件的哪一個部分是根部分,並且在大小變更時保持根部分穩定。

也參閱 組合體 ,這是一個文章,記錄根零件是什麼,以及如何使用它們。

Rotation

未複製
平行讀取

三軸的旋轉度。

當設定此屬性任何 WeldsMotor6Ds 連接到此零件時,將有相應的 C0 或 1> Class.JointInstance.C1|C11> ��

WeldConstraints 也會在移動工具動時暫時關閉並重新啟用。

未複製
平行讀取

零件的 Size 屬性決定了其 視覺 尺寸,而 ExtentsSize 代表物理引擎使用的實際

零件的大小決定了它的質量,其大小由 BasePart:GetMass() 決定。 A 零件的 Size 是其他物體的各種對象所使用的:

範例程式碼

Pyramid Builder

local TOWER_BASE_SIZE = 30
local position = Vector3.new(50, 50, 50)
local hue = math.random()
local color0 = Color3.fromHSV(hue, 1, 1)
local color1 = Color3.fromHSV((hue + 0.35) % 1, 1, 1)
local model = Instance.new("Model")
model.Name = "Tower"
for i = TOWER_BASE_SIZE, 1, -2 do
local part = Instance.new("Part")
part.Size = Vector3.new(i, 2, i)
part.Position = position
part.Anchored = true
part.Parent = model
-- Tween from color0 and color1
local perc = i / TOWER_BASE_SIZE
part.Color = Color3.new(
color0.R * perc + color1.R * (1 - perc),
color0.G * perc + color1.G * (1 - perc),
color0.B * perc + color1.B * (1 - perc)
)
position = position + Vector3.new(0, part.Size.Y, 0)
end
model.Parent = workspace
平行讀取

TopSurface 屬性決定零件的 +Y 方向使用的表面類型。當兩個零件的面向放置在一起時,它們可能會創建一個關係在他們之間。如果設為「Motor」,BasePart.TopSurfaceInput 將決定發動機的關係行為。

大多數表面類型會在零件面上渲染一個紋理,如果 BasePart.Material 設為「塑膠」,那麼一些表面類型 - 關節、電機和步驅馬達 - 會在遊戲世界中呈現 3D 裝飾。如果此屬性在 SurfaceSelection 視窗中選取,它會與 Class.Surface

範例程式碼

Show All SurfaceTypes

local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end

Transparency

平行讀取

透明度屬性控制零至 1 的比例上的零件可見度,其中 0 完全可見 (opaque),而值 1 完全不可見 (沒全部 所有渲染)。

BasePart.Reflectance 可以減少磚塊的總透明度,如果設置在 1 附近。

雖然完全透明的零件不會 renders ,但半透明的對象有一些重要的 rendering 成本。 有很多的半透明零件可能會拖慢遊戲的履約。

當透明零件交疊時,會發生不可預測的渲染順序 - 請嘗試保持半透明零件,以避免這個。

Class.BasePart.LocalTransparency 是一種可以僅對本地客戶端可見的透明度修改器。

範例程式碼

Fade Door

-- Paste into a Script inside a tall part
local part = script.Parent
local OPEN_TIME = 1
-- Can the door be opened at the moment?
local debounce = false
local function open()
part.CanCollide = false
part.Transparency = 0.7
part.BrickColor = BrickColor.new("Black")
end
local function close()
part.CanCollide = true
part.Transparency = 0
part.BrickColor = BrickColor.new("Bright blue")
end
local function onTouch(otherPart)
-- If the door was already open, do nothing
if debounce then
print("D")
return
end
-- Check if touched by a Humanoid
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if not human then
print("not human")
return
end
-- Perform the door opening sequence
debounce = true
open()
task.wait(OPEN_TIME)
close()
debounce = false
end
part.Touched:Connect(onTouch)
close()
X-Ray Vision

local function makeXRayPart(part)
-- LocalTransparencyModifier will make parts see-through but only for the local
-- client, and it won't replicate to the server
part.LocalTransparencyModifier = 0.5
end
-- This function uses recursion to search for parts in the game
local function recurseForParts(object)
if object:IsA("BasePart") then
makeXRayPart(object)
end
-- Stop if this object has a Humanoid - we don't want to see-through players!
if object:FindFirstChildOfClass("Humanoid") then
return
end
-- Check the object's children for more parts
for _, child in pairs(object:GetChildren()) do
recurseForParts(child)
end
end
recurseForParts(workspace)

方法

AngularAccelerationToTorque

參數

angAcceleration: Vector3
angVelocity: Vector3
預設值:"0, 0, 0"

返回

ApplyAngularImpulse

void

對此零件的裝配添加即時角度力脈,使裝配旋轉。

由此產生的角度速度受到裝置的 mass 的影響。因此,需要更大的裝置才能移動更大的裝置。裝置對於您想要立即施加力的情況,例如爆炸或衝突,是有用的。

如果零件是由服務器 擁有 的話,此功能必須從 Script (不是從

參數

impulse: Vector3

一個強制向量應用在裝配上作為脈衝。


返回

void

ApplyImpulse

void

此功能對此零件的裝配施加即時力脈。

力量應用在裝配的 center of mass ,因此結果的移動只是線性。

由 impulse 產生的速度依賴於組裝的 mass。因此,需要更大的 impulse 才能移動更大的組裝。 impulses 對於你想要立即施加力的情況有用,例如爆炸或衝突。

如果零件是由服務器 擁有 的話,此功能必須從 Script (不是從

參數

impulse: Vector3

一個強制向量應用在裝配上作為脈衝。


返回

void

ApplyImpulseAtPosition

void

此功能在此零件的裝配中立即使用力量強度脈衝,在世界空間的指定位置。

如果位置不是在裝配的 center of mass ,則會導致位置和旋轉運動。

由 impulse 產生的速度依賴於組裝的 mass。因此,需要更大的 impulse 才能移動更大的組裝。 impulses 對於發生了解釋的情況,例如爆炸或衝突,很有用。

如果零件是由服務器 擁有 的話,此功能必須從 Script (不是從

參數

impulse: Vector3

一個強制向量應用在裝配上作為脈衝。

position: Vector3

在世界空間中的位置,以應用衝擊。


返回

void

CanCollideWith

平行寫入

返回零件是否能夠相互碰撞。 此功能會考慮兩個零件的碰撞群。 此功能會發生錯誤,如果指定的零件不是基地零件。

參數

part: BasePart

檢查指定零件是否碰撞。


返回

零件是否可以相互碰撞。

CanSetNetworkOwnership

CanSetNetworkOwnership 函數檢查您是否可以設置零件的網路擁有權。

函數的返回值確認您是否可以呼叫 BasePart:SetNetworkOwner()BasePart:SetNetworkOwnershipAuto() ,而不會遇到錯誤。它返回 true 如果您可以修改/閱取網路擁有權,或返回 false 並且理由為 "因為網路擁有權而無法",作為字串。


返回

您可以修改或閱取網路擁有權和原因。

範例程式碼

Check if a Part's Network Ownership Can Be Set

local part = workspace:FindFirstChild("Part")
if part and part:IsA("BasePart") then
local canSet, errorReason = part:CanSetNetworkOwnership()
if canSet then
print(part:GetFullName() .. "'s Network Ownership can be changed!")
else
warn("Cannot change the Network Ownership of " .. part:GetFullName() .. " because: " .. errorReason)
end
end

GetClosestPointOnSurface

參數

position: Vector3

返回

GetConnectedParts

Instances
平行寫入

返回任何類型的靈活組合節連接到對象的表。

如果 recursive 是真的,此函數將返回基地零件與 BasePart 緊密連接的所有零件。

剛性關節

當兩個零件結合在一起時 (Part0 → Part1) ,一個零件會變得 剛硬 ,如果 Part1 的物理學完全被 1> Part01> 鎖定。這只適用於下列零件類型:

參數

recursive: bool

連接對象的任何 joint 的表。

預設值:false

返回

Instances

GetJoints

Instances
平行寫入

返回連接到此零件的所有關聯零件或限制。


返回

Instances

連接零件或限制的所有列表。

GetMass

平行寫入

GetMass 返回 Mass 屬性的值。

此功能已過時。它仍然支援後端遊戲,您應該直接使用 Mass 屬性。


返回

零件的質量。

範例程式碼

Finding a Part's Mass

local myPart = Instance.new("Part")
myPart.Size = Vector3.new(4, 6, 4)
myPart.Anchored = true
myPart.Parent = workspace
local myMass = myPart:GetMass()
print("My part's mass is " .. myMass)

GetNetworkOwner

平行寫入

返回目前是網路擁有者的玩家,或是伺服器的情況下為零。


返回

目前的玩家,或為網路擁有者,或為伺服器的零。

GetNetworkOwnershipAuto

平行寫入

如果遊戲引擎自動決定網路擁有者,則返回 true。


返回

遊戲引擎是否自動決定此部分的網路擁有者。

GetNoCollisionConstraints

Instances

返回

Instances

GetRootPart

平行寫入

返回組裝的零件的基本部分。當使用 CFrame 移動零件組裝時,重要是移動這個零件組裝 (這將移動所有連接到它的零件)。更多資訊可以在 Assemblies 文章中查看。

此功能擁有 AssemblyRootPart 個舊屬性。它仍然支援倒退兼容性,但您應該使用 AssemblyRootPart 直接。


返回

裝配的基本部分 (連接在一起的零件集)。

GetTouchingParts

Instances

返回一個包含此部分與物理互動的所有零件的桌子。如果零件本身有 CanCollide 設為 false,則此功能將返回空桌子,除


返回

Instances

一個包含所有零件交叉點和可能與此零件碰撞的表。

GetVelocityAtPosition

平行寫入

返回零件的組裝位置相對於此零件所在位置的線速。 它可以用來識別零件在組裝中不是零件根的位置的線速。 如果組裝沒有角度速度,則零件的線速將在每個位置都一樣。

參數

position: Vector3

返回

IsGrounded

平行寫入

如果對象連接到會將其置於位置的零件 (例如 Anchored 零件),則返回為真。在有 Anchored 零件的裝配中,每個零件都必須是地面。


返回

是否連接到會將對象固定在一個地空間的零件。

Resize

使用 Studio 調整大小工具的大小來變更對象的大小。

參數

normalId: Enum.NormalId

可以調調整大小尺寸的一邊。

deltaAmount: number

要在指定的邊上成長/縮小的程度。


返回

是否要調整零件的大小。

SetNetworkOwner

void

將指定的玩家設定為網路所有者,這和所有連接的零件。當玩家Instance 為零時,伺服器將會是所有者,而不是玩家。

參數

playerInstance: Player

玩家獲得網路擁有權限。

預設值:"nil"

返回

void

SetNetworkOwnershipAuto

void

讓遊戲引擎動態決定誰會處理零件的物理學 (一個客戶或伺服器).


返回

void

TorqueToAngularAcceleration

參數

torque: Vector3
angVelocity: Vector3
預設值:"0, 0, 0"

返回

IntersectAsync

暫停

創建從零件和其他零件在指定陣列中的交叉 геометria中的新 IntersectOperation。只有 Parts 是支持的,不是 Terrain 或 1> Class.Mesh

從呼叫方塊獲取的以下屬性適用於結果的 IntersectOperation

在下列圖像比較中, IntersectAsync() 使用包含藍色方塊的表來在紫色方磚塊上呼叫。結果的 IntersectOperation 以兩個方塊的交叉形狀來解決。

Two block parts overlapping

<figcaption>分離零件</figcaption>
Parts intersected into a new solid model

<figcaption>結果 <code>Class.IntersectOperation</code></figcaption>

注意

  • 原始零件在成功的交叉運作後保持完整。在大多數情況下,您應該 Destroy() 所有原始零件和父級 IntersectOperation 返回的 BasePart 到同一個位置,如果呼叫 2>Class.BasePart2> 。
  • 由預設情況下,結果交叉點的面色會從原始零件的 Color 屬性借鑑。要將整個交叉點變更為特定顏色,請將 UsePartColor 屬性設置為 true
  • 如果交叉運算將結果為20,000個以上的三角形,它將被簡化為20,000個三角形。

參數

parts: Instances

交叉路口的物件。

collisionfidelity: Enum.CollisionFidelity

結果的 Class.IntersectOperation 值。

預設值:"Default"
renderFidelity: Enum.RenderFidelity

結果的 Enum.RenderFidelity 值的 PartOperation 值。

預設值:"Automatic"

返回

結果 IntersectOperation 使用預設名稱 交叉點

SubtractAsync

暫停

從零件中創建新的 UnionOperation 零件,減去零件在指定陣列中佔用的 геометria。只有 Parts 支持,不是 Terrain 或 1> Class

注意,結果的聯合不能是空的,因為它們會減去子тра。如果運算結果為完全空的 геометrie,它們將失敗。

在下列圖像比較中, SubtractAsync() 使用包含紫色方磚塊的表來在藍色圓柱上使用。結果的 UnionOperation 以形狀解決為方磚塊的幾何圖形從圓柱的幾何圖形。

Longer block overlapping a cylinder

<figcaption>分離零件</figcaption>
Block part subtracted from cylinder

<figcaption>結果 <code>Class.UnionOperation</code></figcaption>

參數

parts: Instances

參與減法的物體。

collisionfidelity: Enum.CollisionFidelity
預設值:"Default"
renderFidelity: Enum.RenderFidelity

結果的 Enum.RenderFidelity 值的 PartOperation 值。

預設值:"Automatic"

返回

結果 UnionOperation 使用預設名稱 Union

範例程式碼

BasePart:SubtractAsync()

local Workspace = game:GetService("Workspace")
local mainPart = script.Parent.PartA
local otherParts = { script.Parent.PartB, script.Parent.PartC }
-- Perform subtract operation
local success, newSubtract = pcall(function()
return mainPart:SubtractAsync(otherParts)
end)
-- If operation succeeds, position it at the same location and parent it to the workspace
if success and newSubtract then
newSubtract.Position = mainPart.Position
newSubtract.Parent = Workspace
end
-- Destroy original parts which remain intact after operation
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end

UnionAsync

暫停

從零件中創建新的 UnionOperation 零件,以及佔用零件在指定陣列中所佔的位置。只有 Parts 是支持的,不是 Terrain 或 1>

從呼叫方塊獲取的以下屬性適用於結果的 UnionOperation

在下圖中,UnionAsync() 使用包含紫色圓柱的表來呼叫藍色區塊。結果的 UnionOperation 解釋為兩個零件的結合 геометrie的形狀。

Block and cylinder parts overlapping

<figcaption>分離零件</figcaption>
Parts joined together into a single solid union

<figcaption>結果 <code>Class.UnionOperation</code></figcaption>

注意

  • 原始零件在成功的團合操作後保持完整。在大多數情況下,您應該 Destroy() 所有原始零件和 UnionOperation 返回的 BasePart 位置相同。
  • 預設情況下,結果的聯合會尊重每個零件的 Color 屬性。若要將整個聯合變更為特定顏色,請將 UsePartColor 屬性設為 true
  • 如果結合運算結果為20,000個以上的三角形,它將被簡化為20,000個三角形。

參數

parts: Instances

與呼叫部分結合的對象。

collisionfidelity: Enum.CollisionFidelity
預設值:"Default"
renderFidelity: Enum.RenderFidelity

結果的 Enum.RenderFidelity 值的 PartOperation 值。

預設值:"Automatic"

返回

結果 UnionOperation 使用預設名稱 Union

範例程式碼

BasePart:UnionAsync()

local Workspace = game:GetService("Workspace")
local mainPart = script.Parent.PartA
local otherParts = { script.Parent.PartB, script.Parent.PartC }
-- Perform union operation
local success, newUnion = pcall(function()
return mainPart:UnionAsync(otherParts)
end)
-- If operation succeeds, position it at the same location and parent it to the workspace
if success and newUnion then
newUnion.Position = mainPart.Position
newUnion.Parent = Workspace
end
-- Destroy original parts which remain intact after operation
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end

活動

TouchEnded

在相似條件下,當零件停止接觸其他零件時發生。 發生 當零件停止接觸另一個零件時,在 Class.BasePart.Touched 的條件下。

此事件與 Workspace.TouchesUseCollisionGroups 合作,以確定是否要檢查 衝突群 是否被認識以便進行檢測。

參數

otherPart: BasePart

範例程式碼

Touching Parts Count

local part = script.Parent
local billboardGui = Instance.new("BillboardGui")
billboardGui.Size = UDim2.new(0, 200, 0, 50)
billboardGui.Adornee = part
billboardGui.AlwaysOnTop = true
billboardGui.Parent = part
local tl = Instance.new("TextLabel")
tl.Size = UDim2.new(1, 0, 1, 0)
tl.BackgroundTransparency = 1
tl.Parent = billboardGui
local numTouchingParts = 0
local function onTouch(otherPart)
print("Touch started: " .. otherPart.Name)
numTouchingParts = numTouchingParts + 1
tl.Text = numTouchingParts
end
local function onTouchEnded(otherPart)
print("Touch ended: " .. otherPart.Name)
numTouchingParts = numTouchingParts - 1
tl.Text = numTouchingParts
end
part.Touched:Connect(onTouch)
part.TouchEnded:Connect(onTouchEnded)

Touched

觸摸 事件發生當零件與另一個零件接觸。例個體、實例,如果 零件A 撞到 零件B ,則 1> Class.BasePart.Touched|PartA.Touched 會與 4>

此事件只會在物理運動的結果發生,因此在 CFrame 屬性變更為結果,它將不會發生如果 Class.BasePart.Anchored|Anchored 部分的任何一部分。這也代表在衝突時至少一個部分必須 Anchored 是 1> Class.BasePart.Anchored|

此事件與 Workspace.TouchesUseCollisionGroups 合作,以確定是否要檢查 衝突群 是否被認識以便進行檢測。

參數

otherPart: BasePart

與指定零件聯絡的其他零件。


範例程式碼

Touching Parts Count

local part = script.Parent
local billboardGui = Instance.new("BillboardGui")
billboardGui.Size = UDim2.new(0, 200, 0, 50)
billboardGui.Adornee = part
billboardGui.AlwaysOnTop = true
billboardGui.Parent = part
local tl = Instance.new("TextLabel")
tl.Size = UDim2.new(1, 0, 1, 0)
tl.BackgroundTransparency = 1
tl.Parent = billboardGui
local numTouchingParts = 0
local function onTouch(otherPart)
print("Touch started: " .. otherPart.Name)
numTouchingParts = numTouchingParts + 1
tl.Text = numTouchingParts
end
local function onTouchEnded(otherPart)
print("Touch ended: " .. otherPart.Name)
numTouchingParts = numTouchingParts - 1
tl.Text = numTouchingParts
end
part.Touched:Connect(onTouch)
part.TouchEnded:Connect(onTouchEnded)
Model Touched

local model = script.Parent
local function onTouched(otherPart)
-- Ignore instances of the model coming in contact with itself
if otherPart:IsDescendantOf(model) then return end
print(model.Name .. " collided with " .. otherPart.Name)
end
for _, child in pairs(model:GetChildren()) do
if child:IsA("BasePart") then
child.Touched:Connect(onTouched)
end
end