Physics Skills
Raycasts, overlap checks, and gravity settings.
Guardrails
Mode: Full-Auto required
DO NOT (common hallucinations):
physics_add_rigidbody/physics_add_colliderdo not exist → usecomponent_addwith componentType "Rigidbody"/"BoxCollider"/etc.physics_simulatedoes not exist → physics simulation runs during Play mode- Raycast results use world-space coordinates
Routing:
- For adding physics components → use
componentmodule - For physics material → use
physics_create_material(this module) - For layer collision matrix →
physics_set_layer_collision(this module)
Skills
physics_raycast
Cast a ray and get hit info. Parameters:
originX,originY,originZ(float): Origin point.dirX,dirY,dirZ(float): Direction vector.maxDistance(float, optional): Max distance (default 1000).layerMask(int, optional): Layer mask (default -1).
Returns: { hit: true, collider: "Cube", distance: 5.2, ... }
physics_check_overlap
Check for colliders in a sphere. Parameters:
x,y,z(float): Center point.radius(float): Sphere radius.layerMask(int, optional): Layer mask.
physics_get_gravity
Get global gravity setting. Parameters: None.
physics_set_gravity
Set global gravity setting. Parameters:
x,y,z(float): Gravity vector (e.g. 0, -9.81, 0).
physics_raycast_all
Cast a ray and return ALL hits (penetrating).
| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | originX | float | Yes | - | Ray origin X | | originY | float | Yes | - | Ray origin Y | | originZ | float | Yes | - | Ray origin Z | | dirX | float | Yes | - | Direction X | | dirY | float | Yes | - | Direction Y | | dirZ | float | Yes | - | Direction Z | | maxDistance | float | No | 1000 | Max ray distance | | layerMask | int | No | -1 | Layer mask filter |
Returns: { count, hits: [{ objectName, instanceId, path, point, normal, distance }] }
physics_spherecast
Cast a sphere along a direction and get hit info.
| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | originX | float | Yes | - | Origin X | | originY | float | Yes | - | Origin Y | | originZ | float | Yes | - | Origin Z | | dirX | float | Yes | - | Direction X | | dirY | float | Yes | - | Direction Y | | dirZ | float | Yes | - | Direction Z | | radius | float | Yes | - | Sphere radius | | maxDistance | float | No | 1000 | Max cast distance | | layerMask | int | No | -1 | Layer mask filter |
Returns: { hit, objectName, instanceId, point, distance }
physics_boxcast
Cast a box along a direction and get hit info.
| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | originX | float | Yes | - | Origin X | | originY | float | Yes | - | Origin Y | | originZ | float | Yes | - | Origin Z | | dirX | float | Yes | - | Direction X | | dirY | float | Yes | - | Direction Y | | dirZ | float | Yes | - | Direction Z | | halfExtentX | float | No | 0.5 | Box half extent X | | halfExtentY | float | No | 0.5 | Box half extent Y | | halfExtentZ | float | No | 0.5 | Box half extent Z | | maxDistance | float | No | 1000 | Max cast distance | | layerMask | int | No | -1 | Layer mask filter |
Returns: { hit, objectName, instanceId, point, distance }
physics_overlap_box
Check for colliders overlapping a box volume.
| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | x | float | Yes | - | Box center X | | y | float | Yes | - | Box center Y | | z | float | Yes | - | Box center Z | | halfExtentX | float | No | 0.5 | Box half extent X | | halfExtentY | float | No | 0.5 | Box half extent Y | | halfExtentZ | float | No | 0.5 | Box half extent Z | | layerMask | int | No | -1 | Layer mask filter |
Returns: { count, colliders: [{ objectName, path, isTrigger }] }
physics_create_material
Create a PhysicMaterial asset.
| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | name | string | No | "New PhysicMaterial" | Material name | | savePath | string | No | "Assets" | Save directory path | | dynamicFriction | float | No | 0.6 | Dynamic friction value | | staticFriction | float | No | 0.6 | Static friction value | | bounciness | float | No | 0 | Bounciness value |
Returns: { success, path }
physics_set_material
Set PhysicMaterial on a collider (supports name/instanceId/path).
| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | materialPath | string | Yes | - | Asset path of the PhysicMaterial | | name | string | No | null | GameObject name | | instanceId | int | No | 0 | GameObject instance ID | | path | string | No | null | GameObject hierarchy path |
Returns: { success, gameObject, material }
physics_get_layer_collision
Get whether two layers collide.
| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | layer1 | int | Yes | - | First layer index | | layer2 | int | Yes | - | Second layer index |
Returns: { layer1, layer2, collisionEnabled }
physics_set_layer_collision
Set whether two layers collide.
| Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | layer1 | int | Yes | - | First layer index | | layer2 | int | Yes | - | Second layer index | | enableCollision | bool | No | true | Whether to enable collision |
Returns: { success, layer1, layer2, collisionEnabled }
Minimal Example
import unity_skills
# Raycast from position downward, check for hits
result = unity_skills.call_skill("physics_raycast",
originX=0, originY=5, originZ=0,
dirX=0, dirY=-1, dirZ=0,
maxDistance=10
)
if result.get("hit"):
print(f"Hit: {result['hitObjectName']} at distance {result['distance']}")
Exact Signatures
Exact names, parameters, defaults, and returns are defined by GET /skills/schema or unity_skills.get_skill_schema(), not by this file.
微信扫一扫