tutorials/physics/ray-casting: Update missing v4 fixes (#6439)

This commit is contained in:
Amaral Krichman
2023-01-11 18:02:16 -03:00
committed by GitHub
parent 322e0f5802
commit 0ac2031972

View File

@@ -87,13 +87,13 @@ And in 3D:
.. code-tab:: gdscript GDScript
func _physics_process(delta):
var space_state = get_world().direct_space_state
var space_state = get_world_3d().direct_space_state
.. code-tab:: csharp
public override void _PhysicsProcess(float delta)
{
var spaceState = GetWorld().DirectSpaceState;
var spaceState = GetWorld3d().DirectSpaceState;
}
Raycast query
@@ -109,7 +109,8 @@ may be used. For example:
func _physics_process(delta):
var space_state = get_world_2d().direct_space_state
# use global coordinates, not local to node
var result = space_state.intersect_ray(Vector2(0, 0), Vector2(50, 100))
var query = PhysicsRayQueryParameters2D.create(Vector2(0, 0), Vector2(50, 100))
var result = space_state.intersect_ray(query)
.. code-tab:: csharp
@@ -117,7 +118,8 @@ may be used. For example:
{
var spaceState = GetWorld2d().DirectSpaceState;
// use global coordinates, not local to node
var result = spaceState.IntersectRay(new Vector2(), new Vector2(50, 100));
var query = PhysicsRayQueryParameters2D.create(new Vector2(), new Vector2(50, 100));
var result = spaceState.IntersectRay(query);
}
The result is a dictionary. If the ray didn't hit anything, the dictionary will
@@ -161,10 +163,9 @@ as shown in the following image:
.. image:: img/raycast_falsepositive.png
To avoid self-intersection, the ``intersect_ray()`` function can take an
optional third parameter which is an array of exceptions. This is an
example of how to use it from a CharacterBody2D or any other
collision object node:
To avoid self-intersection, the ``intersect_ray()`` parameters object can take an
array of exceptions via its ``exclude`` property. This is an example of how to use it
from a CharacterBody2D or any other collision object node:
.. tabs::
.. code-tab:: gdscript GDScript
@@ -173,7 +174,9 @@ collision object node:
func _physics_process(delta):
var space_state = get_world_2d().direct_space_state
var result = space_state.intersect_ray(global_position, enemy_position, [self])
var query = PhysicsRayQueryParameters2D.create(global_position, enemy_position)
query.exclude = [self]
var result = space_state.intersect_ray(query)
.. code-tab:: csharp
@@ -182,7 +185,9 @@ collision object node:
public override void _PhysicsProcess(float delta)
{
var spaceState = GetWorld2d().DirectSpaceState;
var result = spaceState.IntersectRay(globalPosition, enemyPosition, new Godot.Collections.Array { this });
var query = PhysicsRayQueryParameters2D.create(globalPosition, enemyPosition);
query.Exclude = new Godot.Collections.Array { this };
var result = spaceState.IntersectRay(query);
}
}
@@ -195,9 +200,9 @@ While the exceptions method works fine for excluding the parent body, it becomes
very inconvenient if you need a large and/or dynamic list of exceptions. In
this case, it is much more efficient to use the collision layer/mask system.
The optional fourth argument for ``intersect_ray()`` is a collision mask. For
example, to use the same mask as the parent body, use the ``collision_mask``
member variable:
The ``intersect_ray()`` parameters object can also be supplied a collision mask.
For example, to use the same mask as the parent body, use the ``collision_mask``
member variable. The array of exceptions can be supplied as the last argument as well:
.. tabs::
.. code-tab:: gdscript GDScript
@@ -205,9 +210,10 @@ member variable:
extends CharacterBody2D
func _physics_process(delta):
var space_state = get_world().direct_space_state
var result = space_state.intersect_ray(global_position, enemy_position,
[self], collision_mask)
var space_state = get_world_2d().direct_space_state
var query = PhysicsRayQueryParameters2D.create(global_position, enemy_position,
collision_mask, [self])
var result = space_state.intersect_ray(query)
.. code-tab:: csharp
@@ -216,8 +222,9 @@ member variable:
public override void _PhysicsProcess(float delta)
{
var spaceState = GetWorld2d().DirectSpaceState;
var result = spaceState.IntersectRay(globalPosition, enemyPosition,
new Godot.Collections.Array { this }, CollisionMask);
var query = PhysicsRayQueryParameters2D.create(globalPosition, enemyPosition,
CollisionMask, new Godot.Collections.Array { this });
var result = spaceState.IntersectRay(query);
}
}