sách gpt4 ai đã đi

c# - Unity2D/C# : How do I make a raycast ignore its first collision?

In lại 作者:行者123 更新时间:2023-11-30 14:22:43 hai mươi bốn 4
mua khóa gpt4 Nike

我的平台游戏的光线转换 Controller 的功能之一是玩家可以跳下单向平台。这很好用,但我想添加额外的功能,让玩家只有在他或她要跳到的平台在一定距离内时才能跳下去。

我的平台 Controller 的跳下功能是这样工作的:

  1. 我的角色从它的盒子对撞机下方射出一条射线,并检测它是否在地面上。
  2. 如果是,并且地面被标记为单向平台,并且玩家按下跳下按钮,它将跳下到下一个平台,无论距离多远。

我已经尝试制作一个跳下方法,从角色的盒子碰撞器的中心创建一个新的光线转换(下面的代码中没有显示,因为到目前为止我完全不成功),并检查碰撞一定的距离。我的问题是它总是检测到它即将跳下的平台的碰撞器,而永远没有机会检测到其他任何东西。

我如何让这个新的光线转换忽略第一次碰撞,潜在地检测光线距离内的碰撞,如果它撞到什么东西让我的角色跳下来?另外,我什至需要做一个新的光线转换,还是我可以只使用我 Controller 上的当前光线转换?

这是我的一些光线转换 Controller 脚本,希望能解释一些功能:

private void MoveVertically(ref Vector3 deltaMovement)
{
float directionY = Mathf.Sign(deltaMovement.y);
float rayLength = Mathf.Abs(deltaMovement.y) + skinWidth;

for (int i = 0; i < verticalRayCount; i++)
{
Vector2 rayOrigin = (directionY == -1) ? raycastOrigins.bottomLeft : raycastOrigins.topLeft;
rayOrigin += Vector2.right * (verticalRaySpacing * i + deltaMovement.x);

RaycastHit2D hit = Physics2D.Raycast(rayOrigin, Vector2.up * directionY, rayLength, collisionMask);

Debug.DrawRay(rayOrigin, Vector2.up * directionY * rayLength, Color.red);

if (hit)
{
if (hit.collider.tag == "platformOneWay")
{
if (directionY == 1)
{
State.IsCollidingWithOneWay = true;
State.IsCollidingAbove = false;
continue;
}

if (CanJumpDown)
{
State.IsCollidingBelow = false;
continue;
}
}

deltaMovement.y = (hit.distance - skinWidth) * directionY;
rayLength = hit.distance;

1 Câu trả lời

实际上,Unity3D 提供了一个名为 Physics2D.RaycastAll 的 API,它不仅返回第一个光线转换点,还返回最大距离内的所有光线转换点作为数组。
Physics2D.RaycastAll 以两个Vector2为参数(光线转换原点和方向)并返回一个RaycastHit2D数组,该数组按距离排序原点到命中点。
下面是一段代码,向您展示了此函数的作用:

public class Raycaster : MonoBehaviour
{
private void Start()
{
RaycastHit2D[] hits = Physics2D.RaycastAll(transform.position, Vector2.down);
for (int i = 0; i < hits.Length; ++i)
{
Debug.LogFormat("The name of collider {0} is \"{1}\".",
i, hits[i].collider.gameObject.name);
}
}
}

关于c# - Unity2D/C# : How do I make a raycast ignore its first collision?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48247840/

hai mươi bốn 4 0
Bài viết được đề xuất: javascript - 如何在另一个函数的函数中使用一个函数
Bài viết được đề xuất: c - 用串口编程C读取多个传感器
Bài viết được đề xuất: javascript - export default something() 意思
Bài viết được đề xuất: C 空指针作为参数
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com