gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:22:43 24 4
gpt4 key购买 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;

最佳答案

实际上,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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com