Class.BasePart 是一個抽象的基
有關 BaseParts 如何組成模擬的剛體,請參閱 組合體。
有很多不同的對象互相交互 BasePart (除了 Terrain 之外),包括:
- Class.附件|附件 可以添加到 BasePart 以指定 CFrames 對零件的相對位置。這些通常由物理 0> Class.Constraints0> 對象所指定在 Attachments3> 和 6>移動限制</
- 像 PointLight 發射從中心的 BasePart 發射光。
概要
屬性
是否確定零件是否可以按照物理學原理移動。
零件裝配的角度速度。
零件裝配在世界空間中的中心。
零件裝配的直線速度。
零件組裝的總量。
一個組裝根部分的引用。
決定零件背面的表面類型 (+Z 方向)。
決定零件底部面的表面類型 (-Y 方向)。
決定零件的顏色。
確定 BasePart 在世界中的位置和方向。
是否確定零件是否與其他零件碰撞。
確定要在空間查詢操作中檢視零件。
決定是否發生 Touched 和 TouchEnded 事件。
是否啟用或否啟用零件的暗影。
描述零件中心的位置在哪個世界位置。
描述零件碰撞群組的名稱。
決定零件的顏色。
指示零件的當前物理屬性。
確定零件的多個物理屬性。
用於啟用或解除零件和裝配件上的空力力量。
Class.BasePart 的物理部分的 BasePart。
BasePart 的實際物理尺寸,按照物理引擎的說明。
決定零件前面的表面類型 (-Z 方向)。
決定零件左面的表面類型 (-X 方向)。
決定對BasePart.Transparency的乘數,只對本地客戶端可見。
決定 Studio 中是否可選擇零件。
描述零件的大小,其密度和體積的產物。
確定零件是否對其剛身體的總質量或穩定性貢獻。
決定零件的材質和預設物理屬性。
Class.MaterialVariant 的名稱。
描述世界上零件的旋轉。
指定零件的中心點偏移值。
描述世界上零件的位置。
上次記錄物理更新的時間。
決定零件反射天空盒子的程度。
說明方法允許的最小尺寸變更。
描述零件可以重新尺寸的面。
決定零件右面的表面類型 (+X 方向)。
決定組裝件根部的主要規則。
三軸的旋轉度。
確定零件的尺寸 (長度、寬度、高度)。
決定零件上方面的表面類型 (+Y 方向)。
決定零件可以看到的程度(零件的反射)。
方法
對組裝件施加角度 impulse。
在裝配的 center of mass 上對裝配進行脈衝。
在指定位置對裝配進行脈衝。
返回零件是否能相互碰撞。
檢查您是否可以設置零件的網路擁有權。
返回任何類型的靈活組合節連接到對象的表。
返回連接到此零件的所有關聯零件或限制。
返回 Mass 屬性的值。
返回目前是網路擁有者的玩家,或是伺服器的情況下為零。
如果遊戲引擎自動決定網路擁有者,則返回 true。
返回零件組的零件。
返回與此零件交叉的所有 BasePart.CanCollide 個真實零件。
返回零件的組裝速度,與此零件相對的位置。
如果對象連接到一個會將其保留在位置的零件(例如Anchored 零件),則返回為真。
使用 Studio 調整大小工具的大小來變更對象的大小。
將指定的玩家設為網路所有者,這和所有連接的零件。
讓遊戲引擎動態決定誰會處理零件的物理學 (一個客戶或伺服器).
- IntersectAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
從零件和其他零件在指定的陣列中交織的 геометria中創建新的 IntersectOperation。
- SubtractAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
從零件中創建新的 UnionOperation 零件,減去指定陣列中零件所佔的地形。
- UnionAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
從零件建立新的 UnionOperation 零件,以及佔用零件在指定的陣列中的地理位置。
取得 PVInstance 的中心點。
以下是 PVInstance 和所有其子 PVInstances 的描述,以便 pivot 現在位於指定的 CFrame 。
活動
物理運動的結果發生時,會發射。
物理運動的結果發生時,火焰會釋放。
屬性
Anchored
錨定 屬性決定 whether 零件會否以物理學方法移動。當啟用時,零件將不會因重力、其他零件碰撞、交叉其他零件或其他物理相關原因而改變位置。因結果,兩個錨定零件將不會發生 BasePart.Touched 對彼此。
錨定的零件仍然可以通過變更其 CFrame 或 Position 來移動,並且仍然可以有非零 AssemblyLinearVelocity 和 1> Class.BasePart.AssemblyAngularVelocity|AssemblyAngularVelocity1>
最後,如果未錨定的零件與錨定的零件通過對象,如 Weld ,它也會作為錨定的零件。如果此類零件被斷斷,零件可能會再次受到物理學影響。請參閱 裝配 了解更多詳情。
網路擁有者無法設定在錨定零件上。如果服務伺服器上的零件狀態發生變更,該零件的網路擁有者將會受影響。
範例程式碼
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
這個零件的組裝的角速度矢量。它是每秒鐘的角度變化速度的百分比。
角度速度在整個裝配過程中保持一致。
將速度直接設置可能會導致不實的動作。使用 Torque 或 AngularVelocity 限制是最佳選擇,或使用 BasePart:ApplyAngularImpulse() 如果您想要即時變更速度。
如果零件是由服務伺服器擁有的話,這個屬性必須從服務器 Script (不是從 Class
AssemblyCenterOfMass
一個位置計算通過 mass 和 position 的所有零件在裝配中的所有零件。
如果裝配有錨定的零件,那零件的中心將是裝配的中心,裝配將擁有無限的零件。
知道中心的 масс可以幫助裝配保持穩定。 對 масс中心施加的力量不會導致角度加速,只是線性。 有低中心的 масс裝配將會在重力效果下保持良好的時間。
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
範例程式碼
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
範例程式碼
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.Transparency 和 BasePart.Reflectance 決定。
範例程式碼
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> ,且物理解決器將嘗試解決任何交叉檢查,
為了跟蹤位置相對於零件的 CFrame , Attachment 可能會很有用。
範例程式碼
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 來禁用此情況。
有關碰撞的更多資訊,請參閱 碰撞。
範例程式碼
-- 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 可以決定零件是否在空間查詢操作中考慮,例如 GetPartBoundsInBox 或 Raycast 。 CanCollide 必須也被禁用,當禁用 CanQuery 時。這些功能將永遠不包含其 Can
除此屬性外,也可以使用 OverlapParams 或 RaycastParams 對象來排除從指定列表中的零件,當呼叫空間查詢函數。
CanTouch
此屬性決定 whether Class.BasePart.Touched|
注意,此衝突邏輯可以通過 Class.Workspace.TouchesUseCollisionGroups 屬性設置為尊重 Workspace.TouchesUseCollisionGroups 。如果 true 是,非協調群組中的零件將無視協調事件 2>和2> ,因此此屬性無效。
性能
當有 CanTouch 和 CanCollide 設為 false 時,這些零件將永遠不需要計算任何類型的零件碰撞。但是,它們仍然可
CastShadow
是否啟用或否啟用零件的暗影。
注意,此功能不是為了 增強性能 設計的。它只應該在你想要隱藏零件所帶來的陰影所以在零件上禁用此屬性。對於某個零件啟用此屬性可能會導致視覺上的藝術效果在零件上 cast 在零件上 cast 上 cast。
CenterOfMass
中心的質量屬性描述零件的中心質量位置。如果這是單一零件的組合,這是從世界空間轉換到本地的 AssemblyCenterOfMass 。對於簡單的 AssemblyCenterOfMass ,中心的質量通常是 0,0
CollisionGroup
Class.BasePart.CollisionGroup|CollisionGroup 屬性描述零件的衝突群組的名稱 (最多 100 個字元)。零件從預設群組開始 (最多 5 個字元) 。此值無法為空。
雖然此屬性本身不是複製,但引擎會內部重複值以解決後端兼容問題。
範例程式碼
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.Transparency 和 BasePart.Reflectance 決定。
範例程式碼
-- 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 包含各種零件材料的列表。
範例程式碼
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
FrontSurface
FrontSurface 屬性決定零件的 -Z 方向使用的表面類型。當兩個零件的面向放置在一起時,它們可能會創建一個共同的表面。如果設為「Motor」,BasePart.FrontSurfaceInput 將決定零件的動力關係。
如果 BasePart.Material 設為「塑膠」,大多數表面類型都會在零件面上渲染紋理。一些表面類型包括螺柱、發動機和步驟電機,會在遊戲世界中與 SurfaceSelection 的外觀相似。如果在屬性窗口中選擇此屬性,它會在遊戲
範例程式碼
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 的外觀相似。如果在屬性窗口中選擇此屬性,它會在遊戲
範例程式碼
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> )是否選擇。此屬性通常在
範例程式碼
-- 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 函數返回。
- 零件的密度是由其 Material 或 CustomPhysicalProperties 決定。 如果指定,則密度會取決於零件的 Class.BasePart.Material|Material 或 1> Class.BasePart.CustomPhysicalProperties|CustomPhysicalProperties1>。
Massless
如果此屬性啟用,BasePart 將不會在其裝配的總質量或穩定性上貢獻,直到它被焊接到另一個具有質量的零件。
如果零件是 AssemblyRootPart 的根部分,這將對該零件無視,它仍會為其提供組裝貢獻,像其他零件一樣。無論零件是否為零件,它們都不會成為組裝根部分,直到所有零件都成為零件,直到所有零件都成為零件,直到所有零件都成為零件,直到所有零件都成為零件,直到所有零件都成
這可能有助於像車輛上的可選配件在您不想影響車輛操作性的情況下進行處網格。
也參閱 組合體 ,這是一個文章,記錄根零件是什麼,以及如何使用它們。
Material
材料屬性允許建造者設置零件的材質和預設物理屬性(如果 BasePart.CustomPhysicalProperties 是未設紋理的情況下)。 預設塑膠材料有很輕的材質,而 SmoothPlastic 材料沒有任何材質。一些材質結構,例如 DiamondPlate 和 Granite ,具有非常可見的材
設置此屬性,然後啟用 BasePart.CustomPhysicalProperties 會使用材料的預設物理屬性。例個體、實例,DiamondPlate是一種很鬆的材料,而 Wood 是很輕的材料。一個零件的密度將決定它在地形水中漂浮的否定。
玻璃材料會在中等圖形設定下變更渲染行為。它會在一些反射性 (類似於 BasePart.Reflectance 和視角扭曲) 和玻璃部分的圖像。效果在球形零件 (將 Class.BasePart.Shape 設置為 Ball) 上尤為明顯。半透明物體和玻璃部分在玻璃後的玻璃部分不
範例程式碼
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 的順序應用。這與正確的
當設定此屬性任何 Welds 或 Motor6Ds 連接到此零件時,將有相應的 C0 或 1> Class.JointInstance.C1|C11> ��
WeldConstraints 也會在移動工具動時暫時關閉並重新啟用。
範例程式碼
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
此屬性指定零件的中心點偏移,其中 CFrame 是 part:GetPivot() 與 part.CFrame * part.PivotOffset 相同。
這很方便設置槽針位置在 本地 空間,但將零件的槽針設置在 世界 空間可以執行以下操作:
local part = workspace.BluePartlocal desiredPivotCFrameInWorldSpace = CFrame.new(0, 10, 0)part.PivotOffset = part.CFrame:ToObjectSpace(desiredPivotCFrameInWorldSpace)
範例程式碼
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)
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> 的位置,但也可以設設定。
當設定此屬性任何 Welds 或 Motor6Ds 連接到此零件時,將有相應的 C0 或 1> Class.JointInstance.C1|C11> ��
WeldConstraints 也會在移動工具動時暫時關閉並重新啟用。
Reflectance
反射率屬性決定part反射天空盒的程度。值 0 表示零,值 1 表示完全反射。
反射率不會受到 BasePart.Transparency 的影響,除非零件完全透明,否則反射率將不全部 所有渲染。反射率可能會或不會被忽略,取決於零件的 BasePart.Material。
範例程式碼
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
範例程式碼
-- 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 對象在哪些面
範例程式碼
-- 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
範例程式碼
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
三軸的旋轉度。
當設定此屬性任何 Welds 或 Motor6Ds 連接到此零件時,將有相應的 C0 或 1> Class.JointInstance.C1|C11> ��
WeldConstraints 也會在移動工具動時暫時關閉並重新啟用。
Size
零件的 Size 屬性決定了其 視覺 尺寸,而 ExtentsSize 代表物理引擎使用的實際
零件的大小決定了它的質量,其大小由 BasePart:GetMass() 決定。 A 零件的 Size 是其他物體的各種對象所使用的:
- ParticleEmitter 以確定從哪個區域生成的粒子。
- BlockMesh 以部分決定渲染方形棱鏡。
- SpecialMesh 對於某些 MeshTypes ,以確定渲染網格的大小。
- SurfaceLight 以確定要照亮的空間。
範例程式碼
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
TopSurface 屬性決定零件的 +Y 方向使用的表面類型。當兩個零件的面向放置在一起時,它們可能會創建一個關係在他們之間。如果設為「Motor」,BasePart.TopSurfaceInput 將決定發動機的關係行為。
大多數表面類型會在零件面上渲染一個紋理,如果 BasePart.Material 設為「塑膠」,那麼一些表面類型 - 關節、電機和步驅馬達 - 會在遊戲世界中呈現 3D 裝飾。如果此屬性在 SurfaceSelection 視窗中選取,它會與 Class.Surface
範例程式碼
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 是一種可以僅對本地客戶端可見的透明度修改器。
範例程式碼
-- 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()
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
參數
返回
ApplyAngularImpulse
對此零件的裝配添加即時角度力脈,使裝配旋轉。
由此產生的角度速度受到裝置的 mass 的影響。因此,需要更大的裝置才能移動更大的裝置。裝置對於您想要立即施加力的情況,例如爆炸或衝突,是有用的。
如果零件是由服務器 擁有 的話,此功能必須從 Script (不是從
參數
一個強制向量應用在裝配上作為脈衝。
返回
ApplyImpulse
此功能對此零件的裝配施加即時力脈。
力量應用在裝配的 center of mass ,因此結果的移動只是線性。
由 impulse 產生的速度依賴於組裝的 mass。因此,需要更大的 impulse 才能移動更大的組裝。 impulses 對於你想要立即施加力的情況有用,例如爆炸或衝突。
如果零件是由服務器 擁有 的話,此功能必須從 Script (不是從
參數
一個強制向量應用在裝配上作為脈衝。
返回
ApplyImpulseAtPosition
此功能在此零件的裝配中立即使用力量強度脈衝,在世界空間的指定位置。
如果位置不是在裝配的 center of mass ,則會導致位置和旋轉運動。
由 impulse 產生的速度依賴於組裝的 mass。因此,需要更大的 impulse 才能移動更大的組裝。 impulses 對於發生了解釋的情況,例如爆炸或衝突,很有用。
如果零件是由服務器 擁有 的話,此功能必須從 Script (不是從
參數
返回
CanCollideWith
返回零件是否能夠相互碰撞。 此功能會考慮兩個零件的碰撞群。 此功能會發生錯誤,如果指定的零件不是基地零件。
參數
檢查指定零件是否碰撞。
返回
零件是否可以相互碰撞。
CanSetNetworkOwnership
CanSetNetworkOwnership 函數檢查您是否可以設置零件的網路擁有權。
函數的返回值確認您是否可以呼叫 BasePart:SetNetworkOwner() 或 BasePart:SetNetworkOwnershipAuto() ,而不會遇到錯誤。它返回 true 如果您可以修改/閱取網路擁有權,或返回 false 並且理由為 "因為網路擁有權而無法",作為字串。
返回
您可以修改或閱取網路擁有權和原因。
範例程式碼
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
GetConnectedParts
返回任何類型的靈活組合節連接到對象的表。
如果 recursive 是真的,此函數將返回基地零件與 BasePart 緊密連接的所有零件。
剛性關節
當兩個零件結合在一起時 (Part0 → Part1) ,一個零件會變得 剛硬 ,如果 Part1 的物理學完全被 1> Part01> 鎖定。這只適用於下列零件類型:
參數
返回
GetJoints
返回連接到此零件的所有關聯零件或限制。
返回
連接零件或限制的所有列表。
GetMass
GetMass 返回 Mass 屬性的值。
此功能已過時。它仍然支援後端遊戲,您應該直接使用 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)
GetNoCollisionConstraints
返回
GetRootPart
返回組裝的零件的基本部分。當使用 CFrame 移動零件組裝時,重要是移動這個零件組裝 (這將移動所有連接到它的零件)。更多資訊可以在 Assemblies 文章中查看。
此功能擁有 AssemblyRootPart 個舊屬性。它仍然支援倒退兼容性,但您應該使用 AssemblyRootPart 直接。
返回
裝配的基本部分 (連接在一起的零件集)。
GetTouchingParts
返回一個包含此部分與物理互動的所有零件的桌子。如果零件本身有 CanCollide 設為 false,則此功能將返回空桌子,除
返回
一個包含所有零件交叉點和可能與此零件碰撞的表。
GetVelocityAtPosition
返回零件的組裝位置相對於此零件所在位置的線速。 它可以用來識別零件在組裝中不是零件根的位置的線速。 如果組裝沒有角度速度,則零件的線速將在每個位置都一樣。
參數
返回
IsGrounded
如果對象連接到會將其置於位置的零件 (例如 Anchored 零件),則返回為真。在有 Anchored 零件的裝配中,每個零件都必須是地面。
返回
是否連接到會將對象固定在一個地空間的零件。
Resize
使用 Studio 調整大小工具的大小來變更對象的大小。
參數
可以調調整大小尺寸的一邊。
要在指定的邊上成長/縮小的程度。
返回
是否要調整零件的大小。
SetNetworkOwner
將指定的玩家設定為網路所有者,這和所有連接的零件。當玩家Instance 為零時,伺服器將會是所有者,而不是玩家。
參數
玩家獲得網路擁有權限。
返回
SetNetworkOwnershipAuto
讓遊戲引擎動態決定誰會處理零件的物理學 (一個客戶或伺服器).
返回
IntersectAsync
創建從零件和其他零件在指定陣列中的交叉 геометria中的新 IntersectOperation。只有 Parts 是支持的,不是 Terrain 或 1> Class.Mesh
從呼叫方塊獲取的以下屬性適用於結果的 IntersectOperation:
- Class.BasePart.Color|Color , Material , MaterialVariant , 0> Class.BasePart.Reflectance|Reflectance0> , Color3>
- Class.BasePart.Anchored|Anchored , Density , Elasticity , 0> Class.BasePart.ElasticityWeight|Elasticity0> , 3>
在下列圖像比較中, IntersectAsync() 使用包含藍色方塊的表來在紫色方磚塊上呼叫。結果的 IntersectOperation 以兩個方塊的交叉形狀來解決。
注意
- 原始零件在成功的交叉運作後保持完整。在大多數情況下,您應該 Destroy() 所有原始零件和父級 IntersectOperation 返回的 BasePart 到同一個位置,如果呼叫 2>Class.BasePart2> 。
- 如果交叉運算將結果為20,000個以上的三角形,它將被簡化為20,000個三角形。
參數
交叉路口的物件。
結果的 Class.IntersectOperation 值。
結果的 Enum.RenderFidelity 值的 PartOperation 值。
返回
結果 IntersectOperation 使用預設名稱 交叉點 。
SubtractAsync
從零件中創建新的 UnionOperation 零件,減去零件在指定陣列中佔用的 геометria。只有 Parts 支持,不是 Terrain 或 1> Class
注意,結果的聯合不能是空的,因為它們會減去子тра。如果運算結果為完全空的 геометrie,它們將失敗。
在下列圖像比較中, SubtractAsync() 使用包含紫色方磚塊的表來在藍色圓柱上使用。結果的 UnionOperation 以形狀解決為方磚塊的幾何圖形從圓柱的幾何圖形。
參數
參與減法的物體。
結果的 Enum.CollisionFidelity 值為 UnionOperation。
結果的 Enum.RenderFidelity 值的 PartOperation 值。
返回
結果 UnionOperation 使用預設名稱 Union 。
範例程式碼
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:
- Class.BasePart.Color|Color , Material , MaterialVariant , 0> Class.BasePart.Reflectance|Reflectance0> , Color3>
- Class.BasePart.Anchored|Anchored , Density , Elasticity , 0> Class.BasePart.ElasticityWeight|Elasticity0> , 3>
在下圖中,UnionAsync() 使用包含紫色圓柱的表來呼叫藍色區塊。結果的 UnionOperation 解釋為兩個零件的結合 геометrie的形狀。
注意
- 如果結合運算結果為20,000個以上的三角形,它將被簡化為20,000個三角形。
參數
與呼叫部分結合的對象。
結果的 Enum.CollisionFidelity 值為 UnionOperation。
結果的 Enum.RenderFidelity 值的 PartOperation 值。
返回
結果 UnionOperation 使用預設名稱 Union 。
範例程式碼
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 合作,以確定是否要檢查 衝突群 是否被認識以便進行檢測。
參數
範例程式碼
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 合作,以確定是否要檢查 衝突群 是否被認識以便進行檢測。
參數
與指定零件聯絡的其他零件。
範例程式碼
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)
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