【问题标题】:How to create collider between two circle in 2D如何在 2D 中的两个圆之间创建对撞机
【发布时间】:2016-09-05 20:43:37
【问题描述】:



我已经创建了第一个图像的网格,我想要粉红色阴影区域之间的碰撞器


编写以下脚本后,我在第二张图片中得到了对撞机


    void InnerOuterCircle () {

    vertice = new List<Vector3> ();
    triangle = new List<int> ();

    for (int x = 0; x <= angle; x ++) {

        vertice.Add(new Vector3(Mathf.Cos(x * Mathf.Deg2Rad) * innerRadius,Mathf.Sin(x * Mathf.Deg2Rad) * innerRadius));
        vertice.Add(new Vector3(Mathf.Cos(x * Mathf.Deg2Rad) * outerRadius,Mathf.Sin(x * Mathf.Deg2Rad) * outerRadius));

    }

    for (int x = 0; x < vertice.Count - 2; x += 2) {

        triangle.Add (x + 0);
        triangle.Add (x + 2);
        triangle.Add (x + 1);

        triangle.Add (x + 2);
        triangle.Add (x + 3);
        triangle.Add (x + 1);

    }

    Mesh mesh = new Mesh ();

    MeshFilter filter = GetComponent<MeshFilter> ();
    filter.mesh = mesh;

    mesh.vertices = vertice.ToArray ();
    mesh.triangles = triangle.ToArray ();

    PolygonCollider2D collider = gameObject.AddComponent<PolygonCollider2D> ();
    Vector2[] edgePoints = new Vector2[vertice.Count];
    for (int i = 0; i < vertice.Count; i++) {
        edgePoints [i] = vertice [i];
    }
    collider.points = edgePoints;
}

【问题讨论】:

    标签: c# unity3d game-physics


    【解决方案1】:

    假设可以在 Unity 中进行自定义碰撞检测逻辑,那么圆之间的碰撞检测就相当简单了;只需在它们的中心之间的向量上使用勾股定理:

    bool TestCirclesCollision(double x1, double y1, double r1, double x2, double y2, double r2)
    {
        // Pythagorean theorem to compute distance between two points
        var dx = x2 - x1;
        var dy = y2 - y1;
        var distance = Math.Sqrt(dx * dx + dy * dy);
    
        // compare to combined radii of two circles
        // return true if collision, otherwise false
        return distance <= r1 + r2;
    }
    

    如果圆的中心有孔,您将添加一个额外的测试以确保它们不会太近,与现有的半径测试相同,但在内部使用 >= 而不是

    return distance &lt;= r1outer + r2outer &amp;&amp; distance &gt;= r1inner + r2inner;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多