【问题标题】:C# Unity 2D Player Goes through Box ColliderC# Unity 2D 播放器通过 Box Collider
【发布时间】:2016-06-15 20:06:12
【问题描述】:

ive got a problem with a player it has RigidBody2D,Box Collider2D ive 搜索了 2 天,但没有使用 DontGoThroughThings 和许多其他东西的结果,或者可能做错了什么。我正在制作手机游戏并添加到脚本 Input.touches

foreach (Touch touch in Input.touches)
            {
                Vector3 newPosition = transform.position;
                newPosition.y += touch.deltaPosition.y * speed * Time.deltaTime;
                transform.position = newPosition;
            }

它得到了速度,当我将手指移动到快速物体上时,它会直接离开相机视图并且他没有与对撞机发生碰撞

抱歉英语不好 谢谢你的建议 如果需要更多信息,我会提供详细信息。

【问题讨论】:

    标签: c# unity3d unityscript unity5


    【解决方案1】:

    问题可能是您的对象在帧之间移动得太快以至于完全错过了对撞机。您应该将对象可以达到的最大速度限制在某个合理范围内,而不是直接使用touch.deltaPosition.y。像这样的:

    foreach (Touch touch in Input.touches)
    {
        Vector3 newPosition = transform.position;
        newPosition.y += Mathf.Clamp(touch.deltaPosition.y * speed, MIN_SPEED, MAX_SPEED) * Time.deltaTime;
        transform.position = newPosition;
    }
    

    【讨论】:

    • 感谢您的建议,它现在没有开箱即用的碰撞器,但它只会上升不会下降。非常感谢
    • @PeterisUlmanis 您需要将 MiN_SPEED 设置为负值才能让对象下降。
    【解决方案2】:

    这是离散物理模拟的常见问题。

    link 复制/粘贴,以防网站死机:

    这种现象称为“隧道效应”。当隧道出现时 对象的速度如此之快,以至于新的更新位置没有 与它所朝向的对象相交。

    这一切都与规模有关。隧道只会发生在一个对象 移动得足够快,以至于它可以移动整个长度 另一个物体在时间量子中的最短宽度 模拟。

    有一些物理模拟库可以执行连续 碰撞检测 (CCD) 将确定两个物体是否 在模拟框架内的任何点发生碰撞。通常这是 通过创建具有体积的新碰撞形状来完成 包含移动物体在整个空间中占据的所有空间 时间量子。然后它试图找出 与其他物体的运动体积,然后看起来更近一些 如果两个物体都存在于它们碰撞的交点处 卷。

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多