Workspace
*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.
Nhiệm vụ chính của Workspace là giữ các đối tượng tồn tại trong thế giới 3D, hiệu quả BaseParts và Attachments .Trong khi những đối tượng như vậy là con cháu của Workspace , chúng sẽ được hoạt động.Đối với BaseParts , điều này có nghĩa là chúng sẽ được hiển thị, và tương tác vật lý với các bộ phận và thế giới khác.Đối với Attachments , điều này có nghĩa là các đối tượng được trang trí cho họ, như ParticleEmitters , Beams và BillboardGuis , sẽ được hiển thị.
Hiểu rõ hành vi này là quan trọng, bởi vì nó có nghĩa là các đối tượng có thể bị xóa khỏi Workspace khi chúng không cần thiết.Ví dụ, bản đồ Models có thể bị xóa khi bản đồ khác đang được chơi.Các đối tượng không cần ngay lập tức trong thế giới 3D thường được lưu trữ trong ReplicatedStorage hoặc ServerStorage .
Trong vai trò là người giữ các đối tượng 3D hoạt động, Workspace bao gồm một số chức năng hữu ích liên quan đến các bộ phận, vị trí của chúng và khớp giữa chúng.
Truy cập Vào Không gian Làm việc
Workspace có thể truy cập theo nhiều cách, tất cả đều hợp lệ.
- workspace
- game:GetService("Workspace")
- game.Workspace
Ghi chú
- Các đối tượng cần trang trí, như và , sẽ ở vị trí khi được cha chấp khi không có trang trí nào khác được cài đặt.
- Các phương pháp Model:MakeJoints() và Model:BreakJoints() được thừa hưởng từ lớp Model đã bị thay thế bởi Workspace:MakeJoints() và Workspace:BreakJoints() mà chỉ có thể được sử dụng trong plugin.
- Không thể xóa Workspace .
- Vật thể hiện tại của một khách hàng có thể được truy cập bằng cách sử dụng thuộc tính .
- Vật thể Terrain có thể được truy cập bằng cách sử dụng thuộc tính Workspace.Terrain.
Tóm Tắt
Thuộc Tính
Mật độ không khí ở cấp độ mặt đất, được sử dụng trong mô hình lực khí động.
Xác định xem tài sản được tạo bởi người dùng khác có thể được bán trong trò chơi hay không.
Xác định chế độ giới hạn hoạt họa cho khách hàng địa phương.
Vật thể Camera đang được sử dụng bởi người chơi địa phương.
Số thời gian, bằng giây, mà trò chơi đã chạy.
Xác định độ cao mà rơi BaseParts và tổ tiên của chúng Models được loại bỏ khỏi Workspace .
Xác định xem liệu động cơ vật lý có tính toán lực khí động học trên BaseParts có đặc tính EnableFluidForces là đúng hay không.
Xác định vectơ gió toàn cầu cho cỏ địa hình hoạt hình, đám mây năng động và hạt cảnh.
Xác định tốc độ gia tốc do trọng lực áp dụng cho việc rơi BaseParts .
Bật hỗ trợ cho các hạn chế cho IKControls. Nếu bị vô hiệu hóa, IKControls sẽ bỏ qua các hạn chế về vật lý.
Xác định xem đầu nhân vật và phụ kiện có nên được tải xuống dưới dạng MeshParts không.
Điều khiển logic được sử dụng để chọn phần gốc lắp khi sử dụng bất kỳ hạn chế di chuyển nào.
Xác định cách giải quyết sẽ tiến lên phía trước mô phỏng vật lý theo thời gian.
Cài đặt khi động cơ khởi động lại các xử lý sự kiện.
Cài đặt cách động cơ quyết định khi nào phát nội dung ra khỏi người chơi.
Whether phát trực tiếp nội dung được bật cho địa điểm.
Xác định xem StreamingIntegrityMode có được bật không.
Khoảng cách tối thiểu mà nội dung sẽ được phát trực tiếp cho người chơi có ưu tiên cao.
Khoảng cách tối đa mà nội dung sẽ được phát cho người chơi.
Một tham chiếu đến đối tượng Terrain được cha cho Workspace .
Xác định xem liệu parts trong các nhóm khác nhau được đặt để không va chạm sẽ bỏ qua va chạm và sự kiện chạm.
Đặt cấp độ chi tiết trên mô hình cho các trải nghiệm có bật phát trực tiếp cơ sở dữ liệu.
Kiểm soát hành vi phát trực tiếp mô hình trên Models khi bật phát trực tiếp instancia.
Phần chính của Model , hoặc nil nếu không được đặt rõ ràng.
Tính năng chỉ dành cho biên tập viên được sử dụng để mở rộng mô hình xung quanh trục của nó. Việc đặt tính năng này sẽ di chuyển quy mô như thể Model/ScaleTo đã được gọi trên nó.
Xác định nơi mà trục của một Model mà không có không có một bộ Model.PrimaryPart nằm.
Phương Pháp
Trả về số BaseParts mà được coi là hoạt động về thể chất, do gần đây bị ảnh hưởng bởi vật lý.
Trả về một số nguyên, nằm giữa 0 và 100, đại diện cho tỷ lệ thời gian thực mà mô phỏng vật lý hiện đang bị giảm tốc.
Trả về số khung mỗi giây mà vật lý hiện đang được mô phỏng.
Trả về thời gian Unix của máy chủ trong giây lát.
Tạo khớp giữa Parts được chỉ định và bất kỳ phần tiếp xúc nào tùy thuộc vào bề mặt của các bộ phận và chế độ tạo khớp được chỉ định.
Trả về true nếu trò chơi có PGS Physics solver được bật.
Phá vỡ tất cả các khớp giữa BaseParts và BaseParts khác được chỉ định.
Vị trí và phóng to Workspace.CurrentCamera để hiển thị mức độ BaseParts hiện tại trong Workspace .
Trả về true nếu bất kỳ phần nào trong số được cung cấp BasePart đang chạm vào bất kỳ phần nào khác.
Thả một hình khối theo một hướng nhất định và trả về một RaycastResult nếu hình dạng đánh vào một BasePart hoặc Terrain tế bào.
Trả về một array các phần có hộp liên kết chồng lên một hộp dữ liệu đã cho.
Trả về một array các phần có hộp liên kết chồng lên nhau trên một cạnh tròn nhất định.
Trả về một array các bộ phận có không gian chiếm chung với bộ phận được cung cấp.
- IKMoveTo(part : BasePart,target : CFrame,translateStiffness : number,rotateStiffness : number,collisionsMode : Enum.IKCollisionsMode):()
Di chuyển phần được chỉ định đến vị trí được chỉ định thông qua kinh tế ngược chứ không phải di chuyển trực tiếp đến đó, để đảm bảo các khớp, hạn chế hoặc va chạm mà phần tham gia vào vẫn được hài lòng về mặt vật lý.
Phát ra một tia bằng cách sử dụng một nguồn, hướng và tùy chọn RaycastParams , sau đó trả về một RaycastResult nếu một đối tượng hoặc khu vực có thể kết nối với tia.
- Spherecast(position : Vector3,radius : number,direction : Vector3,params : RaycastParams):RaycastResult?
Thả một hình cầu theo một hướng nhất định và trả về một RaycastResult nếu hình dạng đánh vào một tế bào BasePart hoặc Terrain .
Tiến bộ hóa mô phỏng cho các bộ phận trên thế giới dựa trên tăng thời gian được xác định và một bộ tùy chọn BaseParts .
Bộ này đặt mô hình này là vĩnh viễn cho người chơi được chỉ định. ModelStreamingMode phải được đặt thành PersistentPerPlayer để hành vi được thay đổi là kết quả của việc thêm.
Trả về một mô tả về một khối lượng chứa tất cả các phần của một mô hình.
Trả về kích thước của hộp gắn kết nhỏ nhất chứa tất cả các BaseParts trong Model, cùng với Model.PrimaryPart nếu nó được đặt.
Trả lại tất cả các đối tượng Player được vật phẩm mô hình này lưu trữ.Hành vi thay đổi tùy thuộc vào việc phương pháp này được gọi từ một Script hoặc một LocalScript .
Trả về thước đo chính thống của mô hình, mặc định là 1 cho các mô hình được tạo mới và sẽ thay đổi khi nó được thu nhỏ qua Model/ScaleTo .
Di chuyển PrimaryPart đến vị trí đã cho. Nếu một phần chính chưa được xác định, phần rễ của mô hình sẽ được sử dụng.
Làm cho mô hình này không còn lưu trữ cho người chơi được chỉ định.ModelStreamingMode phải được đặt thành PersistentPerPlayer để hành vi được thay đổi là kết quả của việc loại bỏ.
Đặt yếu tố thước đo của mô hình, điều chỉnh kích thước và vị trí của tất cả các Instances con cháu sao cho có yếu tố thước đo tương đối với kích thước và vị trí ban đầu của chúng khi yếu tố thước đo là 1.
Thay đổi một Model bởi độ trừ Vector3 cho được, giữ nguyên hướng của mô hình.Nếu một BasePart hoặc Terrain đã tồn tại ở vị trí mới thì Model sẽ chồng lên đối tượng đã nói.
Nhận trung tâm của một PVInstance .
Biến đổi PVInstance cùng với tất cả con cháu của nó PVInstances như vậy mà trục trung tâm bây giờ được đặt tại điểm CFrame được chỉ định.
Sự Kiện
Bắt lửa khi các mô hình bền vững đã được gửi đến người chơi được chỉ định.
Thuộc Tính
AirDensity
Cấp độ mặt đất ( Y của 0) độ đậm đặc không khí trong RMU/stud³ đơn vị (xem Roblox Units ), được sử dụng để tính lực khí động nếu Workspace.FluidForces là Experimental .Mặc định tương ứng với độ dày không khí mực nước biển thực tế tại nhiệt độ và áp lực tiêu chuẩn.Mật độ không khí giảm khi độ cao Y tăng, đạt 5% giá trị mặt đất tại 100,000 đinh tán.Dưới Y của 0, độ dày không khí được cố định tại giá trị nhập.
AllowThirdPartySales
Thuộc tính này Workspace xác định xem tài sản được tạo bởi các sử dụng khác có thể được bán trong trò chơi hay không.
Bán hàng bên thứ ba là gì?
Khi giá trị này là sai, như là mặc định, chỉ tài sản được tạo bởi người tạo nơi (đó có thể là một người chơi hoặc một nhóm) và Roblox có thể được bán bằng cách sử dụng MarketplaceService .
Trong hầu hết các trường hợp, các trò chơi không cần phải bán tài sản bên thứ ba.Tuy nhiên, một số trò chơi như quán cà phê giao dịch yêu cầu tính năng này và do đó nó tồn tại như một lựa chọn tùy chọn.
Sản phẩm bên thứ ba nào tôi có thể bán?
Lưu ý, sản phẩm của nhà phát triển chỉ có thể được bán trong trò chơi mà chúng được liên kết, bất kể AllowThirdPartySales được đặt thành gì.Tính chất này ảnh hưởng đến Game Pass và quần áo.
AvatarUnificationMode
ClientAnimatorThrottling
Xác định Enum.ClientAnimatorThrottlingMode để sử dụng cho khách hàng địa phương.
Khi được bật, các hoạt họa trên các ví dụ được mô phỏng từ xa Model sẽ bắt đầu giảm tốc. Bộ giảm tốc tính toán độ giảm tốc bằng cách sử dụng:
- FPS trong trò chơi
- Số lượng hoạt hình hoạt động
CurrentCamera
Vật thể Camera đang được sử dụng bởi người chơi địa phương.
Cách sử dụng Camera hiện tại
Khi tìm kiếm đối tượng của khách hàng Camera, sử dụng thuộc tính này thay vì tìm kiếm một con của Workspace có tên là "Camera".
Khi bạn đặt thuộc tính này, tất cả các đối tượng khác Camera trong Workspace được phá hủy, bao gồm cả trước đó CurrentCamera .Nếu bạn đặt thuộc tính này thành nil hoặc cho một máy ảnh không phải là con cháu của Kho lưu trữ (hoặc CurrentCamera không bị phá hủy khác), một Camera mới sẽ được tạo và được gán.Tránh các tình huống này, vì việc phá hủy máy ảnh có thể có hậu quả không định.
Để biết thêm thông tin, xem Lập trình máy ảnh .
DistributedGameTime
Số thời gian, bằng giây, mà trò chơi đã chạy.
Bất chấp tiêu đề, giá trị này hiện không 'Phân phối' trên khách hàng và máy chủ.Thay vào đó, trên máy chủ nó đại diện cho thời gian máy chủ đã hoạt động.Trên khách hàng, nó đại diện cho thời gian khách hàng đã kết nối với máy chủ.
Các nhà phát triển không nên dựa vào hành vi trên, và có thể thuộc tính này sẽ được đồng bộ giữa các khách hàng và máy chủ trong tương lai.
Những người tìm kiếm thời gian kể từ khi chương trình bắt đầu chạy nên sử dụng chức năng 'time' thay thế.Xem phía dưới để so sánh giữa DistributedGameTime và các lựa chọn thay thế.
local Workspace = game:GetService("Workspace")print(Workspace.DistributedGameTime) -- Time the game started runningprint(os.time()) -- Time since epoch (1 January 1970, 00:00:00) UTCprint(tick()) -- Time since epoch (1 January 1970, 00:00:00) system timeprint(time()) -- Time the game started runningprint(elapsedTime()) -- Time since Roblox started running
FallHeightEnabled
FallenPartsDestroyHeight
Tính chất này xác định chiều cao mà Roblox Engine tự động loại bỏ rơi BaseParts và tổ tiên của chúng Models từ Workspace bằng cách gắn chúng vào nil .Điều này nhằm ngăn chặn các bộ phận đã rơi khỏi bản đồ không tiếp tục rơi mãi mãi.
Nếu một phần bị xóa do hành vi này là phần cuối cùng trong một Model, mô hình đó cũng sẽ bị xóa.Điều này áp dụng cho tất cả các tổ tiên mô hình của phần.
Thuộc tính này bị giới hạn giữa -50,000 và 50,000 bởi vì BaseParts không mô phỏng hoặc hiển thị đúng đắn ở một khoảng cách lớn từ nguồn do sai sót về điểm nổi.
Tính năng này có thể được đọc bởi các kịch bản, nhưng chỉ có thể được đặt bởi các plugin, thanh lệnh hoặc cửa sổ tính năng trong Studio.
FluidForces
Với tính năng này được bật, động cơ vật lý tính lực khí động học trên BaseParts mà tính chất EnableFluidForces của nó là đúng.Mặc định, Default , vô hiệu hóa lực khí động.Lưu ý rằng thuộc tính này không thể được đặt thông qua lập trình và thay vào đó phải được bật/tắt trong Studio.
GlobalWind
Thuộc tính này xác định hướng và sức mạnh gió thổi qua trải nghiệm, ảnh hưởng đến cỏ địa hình, đám mây năng động và các hạt.Xem bài viết Gió toàn cầu để có chi tiết.
Gravity
Xác định tốc độ gia tốc do trọng lực áp dụng cho việc rơi BaseParts .Giá trị này được đo bằng đinh tán mỗi giây vuông và mặc định được đặt thành 196,2 đinh tán/giây 2.Bằng cách thay đổi giá trị này, các nhà phát triển có thể mô phỏng các hiệu ứng của trọng lực thấp hơn hoặc cao hơn trong trò chơi.
Mẫu mã
This script creates a touch pad in the workspace that, when touched, will reduce the game's gravity. Activating the pad again will switch back to normal gravity.
local MOON_GRAVITY_RATIO = 1.62 / 9.81
local DEFAULT_GRAVITY = 196.2
local MOON_GRAVITY = DEFAULT_GRAVITY * MOON_GRAVITY_RATIO
-- Create a touch pad
local pad = Instance.new("Part")
pad.Size = Vector3.new(5, 1, 5)
pad.Position = Vector3.new(0, 0.5, 0)
pad.Anchored = true
pad.BrickColor = BrickColor.new("Bright green")
pad.Parent = workspace
-- Listen for pad touch
local enabled = false
local debounce = false
local function onPadTouched(_hit)
if not debounce then
debounce = true
enabled = not enabled
workspace.Gravity = enabled and MOON_GRAVITY or DEFAULT_GRAVITY
pad.BrickColor = enabled and BrickColor.new("Bright red") or BrickColor.new("Bright green")
task.wait(1)
debounce = false
end
end
pad.Touched:Connect(onPadTouched)
IKControlConstraintSupport
Bật hỗ trợ cho các hạn chế cho IKControls.Giá trị Default là giống như Enabled .Nếu bị vô hiệu hóa, IKControls lược bỏ các hạn chế về vật lý.Xem IKControl để có thêm chi tiết.
InsertPoint
MeshPartHeadsAndAccessories
Bộ đặt xem liệu đầu nhân vật và phụ kiện có nên được tải xuống như MeshParts .Giá trị Default là giống như Enabled .Nếu tính năng này được bật, avatar tích hợp sẽ sử dụng MeshParts cho đầu và phụ kiện của nhân vật.
ModelStreamingBehavior
MoverConstraintRootBehavior
Điều khiển logic được sử dụng để chọn phần gốc lắp cho các cơ chế sử dụng bất kỳ hạn chế nào sau đây:
Khi thuộc tính này được đặt thành Enum.MoverConstraintRootBehaviorMode.Enabled , những hạn chế này sẽ bị bỏ qua khi chọn phần gốc lắp ráp nếu hạn chế không truyền lực giữa hai phần (một số ví dụ là AngularVelocity.ReactionTorqueEnabled được đặt thành false , AlignPosition.ReactionForceEnabled được đặt thành false hoặc AlignOrientation.Mode được đặt thành Enum.OrientationAlignmentMode.OneAttachment ).
Khi thuộc tính này được đặt thành Enum.MoverConstraintRootBehaviorMode.Disabled, các hạn chế này có thể bị nhầm lẫn khi chọn phần gốc lắp ráp, dẫn đến sở hữu mạng không đồng nhất và trễ khi thêm các hạn chế này vào một cơ chế.
PathfindingUseImprovedSearch
PhysicsImprovedSleep
PhysicsSteppingMethod
Xác định cách giải quyết sẽ tiến lên phía trước mô phỏng vật lý theo thời gian.Tùy chọn này không thể thực hiện được và phải được đặt từ thuộc tính PhysicsSteppingMethod của Workspace trong Studio.Xem Bước thời gian thích ứng để có chi tiết.
<th>Mô tả</th></tr></thead><tbody><tr><td><b>Thích ứng</b></td><td>Động cơ cố gắng gán tỷ lệ mô phỏng tối ưu cho các lắp ráp riêng lẻ là 240 Hz, 120 Hz hoặc 60 Hz.Cài đặt này được tối ưu hóa cho hiệu lực.</td></tr><tr><td><b>Cố định</b></td><td>Tất cả các lắp ráp giả lập bên trong không gian làm việc sẽ tiến lên phía trước với tốc độ 240 Hz. Tùy chọn này tốt nhất cho độ ổn định và chính xác mô phỏng tối ưu.</td></tr><tr><td><b>Mặc định</b></td><td>Mặc định hiện tại là <b>Đã sửa</b>.</td></tr></tbody>
Tùy chọn |
---|
Lưu ý rằng khi các tập hợp của tốc độ mô phỏng khác nhau được kết nối thông qua Constraints hoặc va chạm, cơ chế kết hợp sẽ mặc định cho tốc độ mô phỏng cao nhất để đảm bảo ổn định.
PlayerCharacterDestroyBehavior
PrimalPhysicsSolver
RejectCharacterDeletions
RenderingCacheOptimizations
ReplicateInstanceDestroySetting
Retargeting
SandboxedInstanceMode
SignalBehavior
Tính chất này xác định xem các xử lý sự kiện sẽ được tiếp tục ngay lập tức khi sự kiện bắt lửa, hoặc bị trì hoãn và sau đó được tiếp tục tại một điểm tái khởi động sau.Điểm tiếp tục hiện tại bao gồm:
- Xử lý nhập (tiếp tục một lần mỗi lần nhập được xử lý, xem UserInputService )
- Kịch bản chờ lặp lại di sản như wait(), spawn() và delay()
Để biết thêm thông tin, xem Sự kiện bị trì hoãn.
StreamOutBehavior
Các điều khiển StreamOutBehavior kiểm soát nơi nội dung sẽ được gỡ tải từ ReplicationFocus dựa trên điều kiện bộ nhớ thiết bị, hoặc dựa trên bán kính phát trực tiếp.
Xem thêm:
- Workspace.StreamingEnabled điều khiển xem có bật phát trực tiếp nội dung hay không
StreamingEnabled
Thuộc tính StreamingEnabled xác định xem dòng chảy nội dung trò chơi có được bật cho địa điểmđó hay không.Thuộc tính này không thể thực hiện được và do đó phải được đặt trên đối tượng Không gian làm việc trong Studio.
Xem thêm:
StreamingIntegrityMode
Nếu ví dụ phát trực tiếp được bật, một trải nghiệm có thể hành xử theo cách không mong muốn nếu nhân vật của người chơi di chuyển vào khu vực của thế giới chưa được phát trực tiếp cho khách hàng của họ.Tính năng toàn vẹn phát trực tuyến cung cấp một cách để tránh những tình huống tiềm ẩn có thể gây ra vấn đề.
StreamingMinRadius
Thuộc tính StreamingMinRadius cho thấy bán kính xung quanh nhân vật của người chơi hoặc ReplicationFocus trong đó nội dung sẽ được phát trực tuyến với ưu tiên cao nhất.Mặc định là 64 đinh tán.
Cần chú ý khi tăng bán kính tối thiểu mặc định vì việc làm như vậy sẽ yêu cầu nhiều bộ nhớ hơn và nhiều băng thông máy chủ hơn với chi phí của các thành phần khác.
Xem thêm:
- Workspace.StreamingEnabled điều khiển xem có bật phát trực tiếp nội dung hay không
StreamingTargetRadius
Thuộc tính StreamingTargetRadius kiểm soát khoảng cách tối đa khỏi nhân vật của người chơi hoặc hiện tại ReplicationFocus mà nội dung sẽ được phát trực tuyến.Mặc định là 1024 đinh tán.
Lưu ý rằng động cơ được phép giữ nội dung đã tải trước đó ngoài bán kính mục tiêu, cho phép bộ nhớ.
Xem thêm:
- Workspace.StreamingEnabled điều khiển xem có bật phát trực tiếp nội dung hay không
Terrain
Thuộc tính này là một tham chiếu đến đối tượng Terrain được cha cho Workspace .

Xem Mặt địa hình môi trường để biết thêm thông tin.
TouchEventsUseCollisionGroups
TouchesUseCollisionGroups
Tính chất này xác định xem liệu parts trong các nhóm khác nhau được đặt để không va chạm sẽ bỏ qua va chạm và sự kiện chạm.Mặc định, giá trị của thuộc tính này được đặt thành false .
Khi tính năng này được bật, các bộ phận trong các nhóm khác nhau được đặt để không va chạm cũng sẽ bỏ qua tính năng CanTouch, tương tự như cách BasePart.CanCollide bị bỏ qua.Để biết thêm thông tin về hành vi của CanTouch, vui lòng truy cập trang tài sản của nó.
Phương Pháp
GetNumAwakeParts
Trả về số BaseParts mà được coi là hoạt động về thể chất, do gần đây bị ảnh hưởng bởi vật lý.
Chức năng này cung cấp một số lượng của bao nhiêu BaseParts đang bị ảnh hưởng bởi, hoặc gần đây bị ảnh hưởng bởi, các lực vật lý.
local Workspace = game:GetService("Workspace")print(Workspace:GetNumAwakeParts())
Ngủ vs Phần thức dậy
Để đảm bảo hiệu lựctốt, Roblox đặt BaseParts để vật lý không được áp dụng cho trạng thái 'ngủ'.BaseParts với BasePart.Anchored được đặt thành true, ví dụ, sẽ luôn ngủ vì vật lý không áp dụng cho họ.Khi một lực được áp dụng cho một không neo BasePart , một trạng thái 'thức dậy' sẽ được áp dụng.Trong khi một BasePart vẫn đang thức, động cơ vật lý Roblox sẽ thực hiện các tính toán liên tục để đảm bảo các lực vật lý tương tác đúng với bộ phận.Khi BasePart không còn chịu sự ảnh hưởng của lực vật lý, nó sẽ trở lại trạng thái 'ngủ'.
Lợi Nhuận
Số lượng các bộ phận đánh thức.
GetPhysicsThrottling
Trả về một số nguyên, nằm giữa 0 và 100, đại diện cho tỷ lệ thời gian thực mà mô phỏng vật lý hiện đang bị giảm tốc.
Chức năng này có thể được sử dụng để xác định liệu, và đến mức độ nào, giới hạn vật lý đang xảy ra.
Thời gian giảm tốc vật lý là gì?
Giảm tốc độ vật lý xảy ra khi động cơ vật lý phát hiện nó không thể theo kịp trò chơi trong thời gian thực.Khi vật lý bị giảm tốc, nó sẽ cập nhật thường xuyên hơn gây ra BaseParts để di chuyển chậm hơn.
Không giới hạn, mô phỏng vật lý sẽ rơi xa hơn so với trò chơi.Điều này có thể dẫn đến tốc độ khung thấp hơn và các hành vi không mong muốn khác.
Các đối tượng liên quan đến Humanoids được miễn trừ giới hạn vật lý.
Xem thêm Workspace:SetPhysicsThrottleEnabled() .
Hiển thị giới hạn vật lý
Các nhà phát triển nên luôn tránh tạo ra những nơi làm quá tải động cơ vật lý, vì nó dẫn đến trải nghiệm kém cho người chơi.Tuy nhiên, những người muốn mô phỏng giảm tốc độ vật lý vì mục đích nghiên cứu chỉ cần tạo rất nhiều Parts rất nhanh.
local Workspace = game:GetService("Workspace")local i = 0while true doi += 1if i % 5 == 0 thentask.wait()endlocal part = Instance.new("Part", Workspace)end
Lợi Nhuận
Tỷ lệ thời gian thực mà mô phỏng vật lý hiện đang bị giảm tốc.
GetRealPhysicsFPS
Trả về số khung mỗi giây mà vật lý hiện đang được mô phỏng.
Sử dụng GetRealPhysicsFPS để chống lại kẻ lợi dụng
Một sử dụng phổ biến của chức năng này là để phát hiện xem các kẻ lừa đảo có đang tăng tốc độ khung vật lý địa phương của họ để di chuyển nhanh hơn không.Điều này thường được thực hiện bằng cách so sánh kết quả được trả về bởi GetRealPhysicsFPS của một khách hàng với mức tối đa sẽ không bị vi phạm trong các trường hợp bình thường (thường là 65 hoặc 70).Nếu giới hạn này bị vi phạm, các nhà phát triển có thể sử dụng chức năng Player:Kick() để xóa điều đó Player khỏi trò chơi.Quan trọng là phải nhớ rằng, mặc dù thực hành này có thể hiệu quả đôi khi, các biện pháp chống gian lận bên khách không bao giờ là 100% đáng tin cậy.
Lợi Nhuận
Trả về số khung mỗi giây mà vật lý hiện đang được mô phỏng.
Mẫu mã
Speed exploiters commonly increase their local physics FPS in order to increase their character speed. This can be detected from a LocalScript by checking if the player's physics FPS is over the maximum:
local Players = game:GetService("Players")
local player = Players.LocalPlayer
while task.wait(1) do
if workspace:GetRealPhysicsFPS() > 65 then
player:Kick()
end
end
GetServerTimeNow
GetServerTimeNow() trả về sự phát triển tốt nhất của khách hàng về thời gian hiện tại trên máy chủ.Điều này hữu ích để tạo các trải nghiệm đồng bộ bởi vì mỗi khách hàng sẽ nhận được kết quả tương tự dù thời gian hay giờ địa phương của họ.
Điều này trả về một thời gian Unix, tương tự như os.time() , có thể được sử dụng với os.date() hoặc với DateTime.fromUnixTimestamp() .
Thời gian truy cập được trả bởi chức năng này được làm mịn để:
- Nó là một chiều; giá trị của nó sẽ không bao giờ giảm.
- Nó di chuyển với tốc độ tương tự như đồng hồ địa phương trong phạm vi 0,6%.
GetServerTimeNow() là tốn kém để gọi so với DateTime.now() , và chính xác hơn os.clock() , vì vậy nó nên được sử dụng để đảm bảo một sự kiện bắt đầu tại thời gian thực tế phù hợp hoặc điều chỉnh thường xuyên để giữ cho một loạt các sự kiện đồng bộ.
Chức năng này dựa trên máy chủ, vì vậy gọi nó từ một khách hàng không kết nối sẽ gây ra lỗi.Cũng lưu ý rằng chức năng này không phù hợp với những thứ như phần thưởng theo thời gian vì nó không an toàn so với việc theo dõi các bộ đếm thời gian trên máy chủ.
Xem thêm:
- DistributedGameTime , một đồng hồ thời gian trò chơi
Lợi Nhuận
Thời gian chạy dự đoán Unix trên máy chủ.
JoinToOutsiders
Chức năng này tạo các khớp giữa Parts được chỉ định và bất kỳ phần tiếp xúc nào tùy thuộc vào bề mặt của các bộ phận và chế độ tạo khớp được chỉ định.
Chức năng này tạo các khớp giữa các Bộ phận được chỉ định và bất kỳ bề mặt tiếp xúc phẳng nào, tùy thuộc vào bề mặt của các bộ phận và chế độ tạo khớp được chỉ định.
- Keo, khối, lỗ, toàn diện, hàn và bề mặt mịn sẽ tất cả tạo ra các ví dụ hàn.
- Các cạnh tròn sẽ không hàn bề mặt vào bất cứ thứ gì. Các cạnh mép tròn sẽ không hàn bề mặt, nhưng các cạnh mép phẳng sẽ.
Tham số đầu tiên là một array của BaseParts .Các khớp chỉ được tạo giữa các phần trong mảng và không phải trong mảng.Các khớp sẽ không được tạo giữa các phần trong mảng.
Tham số thứ hai là một Enum.JointCreationMode định nghĩa cách các khớp sẽ được tạo.Chuyển trong giá trị enum, Enum.JointCreationMode.All hoặc Enum.JointCreationMode.Surface , có cùng hành vi tương đương với Tham gia luôn luôn
Chức năng này được sử dụng bởi công cụ di chuyển Roblox Studio khi người dùng hoàn thành việc di chuyển một lựa chọn.Kết hợp với Plugin:GetJoinMode() và Workspace:UnjoinFromOutsiders() nó có thể được sử dụng để giữ chức năng kết nối khi phát triển công cụ xây dựng studio tùy chỉnh.Xem các mảnh dưới đây cho một ví dụ.
local Workspace = game:GetService("Workspace")
-- Hoàn thành việc di chuyển một lựa chọn; tạo khớp
local function finishedMovingParts(parts)
local joinMode = Plugin:GetJoinMode()
Workspace:JoinToOutsiders(parts, joinMode)
end
local Workspace = game:GetService("Workspace")
-- Bắt đầu di chuyển một lựa chọn; phá vỡ khớp
local function startMovingParts(parts)
Workspace:UnjoinFromOutsiders(parts)
end
Tham Số
Một mảng của BaseParts cho người mà khớp sẽ được thực hiện.
Các Enum.JointCreationMode sẽ được sử dụng. Truyền đến Enum.JointCreationMode.All hoặc Enum.JointCreationMode.Surface có cùng hành vi tương đương với Tham Gia Luôn Luôn.
Lợi Nhuận
PGSIsEnabled
Trả về true nếu trò chơi có PGS Physics solver được bật.
Vì Workspace.PGSPhysicsSolverEnabled, chức năng PGSIsEnabled cho phép các nhà phát triển cho biết máy giải cơ học nào mà trò chơi đang sử dụng.
Lợi Nhuận
Đúng nếu giải pháp PGS được bật.
UnjoinFromOutsiders
Phá vỡ tất cả các khớp giữa BaseParts và BaseParts khác được chỉ định.
Chức năng này yêu cầu một mảng của BaseParts .Lưu ý, các khớp sẽ không bị phá vỡ giữa các BaseParts (lẫn nhau), chỉ giữa các BaseParts và các BaseParts khác không có trong mảng.
Chức năng này được sử dụng bởi công cụ di chuyển Roblox Studio khi người dùng bắt đầu di chuyển một lựa chọn.Kết hợp với Plugin:GetJoinMode() và Workspace:JoinToOutsiders() nó có thể được sử dụng để giữ chức năng kết nối khi phát triển các công cụ xây dựng Studio tùy chỉnh.Xem các mảnh dưới đây cho một ví dụ.
local Workspace = game:GetService("Workspace")
-- Finished moving a selection; make joints
local function finishedMovingParts(parts)
local joinMode = Plugin:GetJoinMode()
Workspace:JoinToOutsiders(parts, joinMode)
end
local Workspace = game:GetService("Workspace")
-- Started moving a selection; break joints
local function startMovingParts(parts)
Workspace:UnjoinFromOutsiders(parts)
end
Tham Số
Một mảng của BaseParts cho người mà khớp sẽ bị phá vỡ.
Lợi Nhuận
ZoomToExtents
Vị trí và phóng to Workspace.CurrentCamera để hiển thị mức độ BaseParts hiện tại trong Workspace .
Chức năng này đã được sử dụng trong, bây giờ đã bị xóa, nút 'Zoom To Extents' trong Roblox Studio.Nó có hành vi tương tự với tính năng 'Zoom To' (F phím tắt), tuy nhiên nó hiển thị phạm vi của Workspace thay vì đối tượng được chọn hiện tại.
Chức năng này không thể được sử dụng trong các kịch bản nhưng sẽ hoạt động trong thanh lệnh hoặc plugin.
Lợi Nhuận
Sự Kiện
PersistentLoaded
Sự kiện này bắt lửa mỗi khi một người chơi đã gửi tất cả các mô hình vĩnh viễn hiện tại và mô hình nguyên tử không có phần.Tham số player cho thấy người chơi nào đã nhận được tất cả các ví dụ áp dụng.
Lưu ý rằng việc tải trải nghiệm xảy ra trước khi tải vĩnh viễn, và bắn sự kiện DataModel.Loaded không cho thấy tất cả các mô hình vĩnh viễn hiện diện.