查看2d对撞机是否在2点之间

时间:2018-06-19 21:55:45

标签: c# unity3d

我有一款水果忍者游戏,您的鼠标就像刀片一样,您可以切割水果之类的物品。因此,水果有一个撞机,叶片也有撞机。

问题是当您快速切开时,对撞机可能移动得太快而无法与水果碰撞。

要克服这一点,我需要一种方法来查看对撞机是否在两点之间。

我可以这样做得到2分;

vector 3 lastPos = Vector3.zero;

void Update()
{
    /*If collider between Input.mouse.position & lastPos {
        collided();
    }*/
    lastPos = Input.mouse.position;
}

void collided()
{
   ...
}

这可行吗,什么是最好的方法?

1 个答案:

答案 0 :(得分:2)

在刀片内:

private Vector3 bladeLastPos;

private void Start(){
    bladeLastPos = new Vector3(blade.position.x,blade.position.y,blade.position.z); 
}

private void Update()
{
    Vector2 v1 = new Vector2(this.transform.position.x, this.transform.position.y);
    Vector2 v2 = new Vector2(bladeLastPos.x, bladeLastPos.y);
    float maxRange = Vector2.Distance(v1,v2);

    RaycastHit2D[] hits = Physics2D.RaycastAll(v1, v2 - v1, maxRange);

    for (int i = 0; i < hits.Length; i++)
    {
        var component = hits[i].transform.GetComponent<ScriptNameInFruitWhereCutIs>();
        if (!component.cut)
        {
            //Cut! use public properties/functions within component
        }
    }
    bladeLastPos = new Vector3(transform.position.x,transform.position.y,transform.position.z); 
}

这条线将是中心之间的细直线,而不是整个刀片形状留下的完整轨迹。