Unity OnTriggerEnter2D高速击球到地板不起作用

时间:2018-01-22 08:17:02

标签: c# unity3d raycasting

当我设置球的speed = 10 OnTriggerEnter2D来测试地板上的击球时工作正常,但是当我设置speed更高(20)时,{{1没有工作,球通过OnTriggerEnter2D

落下

我的代码:

floor

void Start () { rigiBody = GetComponent<Rigidbody2D>(); ballLayer = 1 << LayerMask.NameToLayer("Ball"); } void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag(Constants.FLOOR_TAG)) { Debug.Log("FLOOR_TAG"); if (HitFloor != null) HitFloor(this); } } void FixedUpdate() { Vector2 tempVect = Direction; tempVect = tempVect.normalized * Speed * Time.deltaTime; Vector2 newPos = rigiBody.position + tempVect; rigiBody.MovePosition(newPos); timer += Time.deltaTime; RaycastHit2D hit = Physics2D.Raycast(newPos, Direction, Speed * Time.deltaTime * 1.2f, ~(ballLayer)); if (!hit) return; ... 以下的检查员

enter image description here

这段代码有什么问题?

ps我使用的是Unity 2017.1.1f1 Personal

4 个答案:

答案 0 :(得分:1)

你必须改变&#34;碰撞检测&#34;刚体的性质。应该是&#34;连续&#34;不是&#34;离散&#34;。如果选择离散值,则告诉刚体在离散时间间隔内检查碰撞。如果你高速移动,刚体可能会错过碰撞。

答案 1 :(得分:0)

将Rigidbody2D组件中的碰撞检测模式设置为“连续”。 Documentation

也许正在改变

RaycastHit2D hit = Physics2D.Raycast(newPos, Direction, Speed * Time.deltaTime * 1.2f, ~(ballLayer));

RaycastHit2D hit = Physics2D.Raycast(newPos, Direction, Speed * 1.2f, ~(ballLayer));

也将解决问题。

答案 2 :(得分:0)

为什么要从newPosition投射Ray?伊莫。您应该从当前位置投射它。

答案 3 :(得分:0)

解决我的问题非常接近

添加并更改了几行

  1. 为课程[RequireComponent(typeof(Rigidbody2D))]
  2. 添加Ball
  3. 将变量RigiBody替换为属性
  4. 现在一切运转良好,球不会高速摔倒在地板上

    更改后的代码如下所示

    [RequireComponent(typeof(Rigidbody2D))] // Added this code
    public class Ball : MonoBehaviour {
      private Rigidbody2D _rigiBody; 
      public Rigidbody2D RigidBody { //And this property
       get {
         if (_rigiBody  == null)
           _rigiBody = GetComponent<Rigidbody2D>();
            return _rigiBody;
          }
       }