C# 通过脚本更改PolygonCallider2D顶点

C# 通过脚本更改PolygonCallider2D顶点,c#,unity3d,C#,Unity3d,如何使用脚本更改PolygonCallider2D顶点的位置?可以访问points成员 polygonallider2dp//只是一个虚假的声明。你必须真正建立一个单一行为。 p、 点[0]=新向量2(0,0); 可以访问点成员 polygonallider2dp//只是一个虚假的声明。你必须真正建立一个单一行为。 p、 点[0]=新向量2(0,0); 在这里它起作用了 pc2d.points = new[]{point1, point2, point3}; pc2d.SetPath (0, n

如何使用脚本更改PolygonCallider2D顶点的位置?

可以访问
points
成员

polygonallider2dp//只是一个虚假的声明。你必须真正建立一个单一行为。
p、 点[0]=新向量2(0,0);

可以访问
成员

polygonallider2dp//只是一个虚假的声明。你必须真正建立一个单一行为。
p、 点[0]=新向量2(0,0);
在这里它起作用了

pc2d.points = new[]{point1, point2, point3};
pc2d.SetPath (0, new[]{ point1, point2, point3 });
它在这里工作

pc2d.points = new[]{point1, point2, point3};
pc2d.SetPath (0, new[]{ point1, point2, point3 });

看到其他答案,我认为这将更加完整,因为其他答案只涉及问题的一部分,在这里,我将尝试收集其他答案并做一个完整的答案:

如果您想更改自己游戏对象的碰撞点,可以执行以下操作:

它给出了一组新的点,如下一个示例所示,通过这种方式,您将更改多边形之前拥有的所有点,至少您希望只更改可能拥有的点集合路径的一部分,例如
SetPath(0,new[]{point1,point2,point3})仅更改碰撞器的路径“0”,而不更改其他路径:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class destroy_out_screen : MonoBehaviour
{
     public GameObject cameraGO; 



     void adapt_collider(){

        Vector2 point1 = new Vector2(1,1);
        Vector2 point2 = new Vector2(0,1);
        Vector2 point3 = new Vector2(0,0);
        Vector2 point4 = new Vector2(1,0);

        gameObject.GetComponent<PolygonCollider2D>().points = new[]{point1,point2,point3,point4};
    }
    void Start()
    {
        adapt_collider();
    }
}
根据unity论坛,你不能这样做,我给出了我找到的链接

最终,您将获得以下信息:


取决于你给对撞机的点数的顺序。

看到其他答案,我认为这会更完整,因为其他答案只是问题的一部分,在这里,我将尝试收集其他答案并做一个完整的答案:

如果您想更改自己游戏对象的碰撞点,可以执行以下操作:

它给出了一组新的点,如下一个示例所示,通过这种方式,您将更改多边形之前拥有的所有点,至少您希望只更改可能拥有的点集合路径的一部分,例如
SetPath(0,new[]{point1,point2,point3})仅更改碰撞器的路径“0”,而不更改其他路径:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class destroy_out_screen : MonoBehaviour
{
     public GameObject cameraGO; 



     void adapt_collider(){

        Vector2 point1 = new Vector2(1,1);
        Vector2 point2 = new Vector2(0,1);
        Vector2 point3 = new Vector2(0,0);
        Vector2 point4 = new Vector2(1,0);

        gameObject.GetComponent<PolygonCollider2D>().points = new[]{point1,point2,point3,point4};
    }
    void Start()
    {
        adapt_collider();
    }
}
根据unity论坛,你不能这样做,我给出了我找到的链接

最终,您将获得以下信息:


取决于你给对撞机点数的顺序。

请查看。谷歌上的第三个链接:@Hellium我找到了这个例子。这对我不起作用,你看过了吗?已经试过谷歌的所有例子了…请复习。谷歌上的第三个链接:@Hellium我找到了这个例子。它对我不起作用,你看过了吗?已经试过谷歌的所有例子了…从来没有试过,但是
polygoncallider2d.SetPath
看起来也很有希望。不工作`_prefab=实例化(prefab)为游戏对象_prefact.transform.position=point1;pc2d=_prefact.GetComponent();pc2d.points[0]=point1;pc2d.points[1]=点2;pc2d.points[2]=点3`从未尝试过,但是
PolygonCallider2D.SetPath
看起来也很有希望。不工作`_prefab=实例化(prefab)为游戏对象_prefact.transform.position=point1;pc2d=_prefact.GetComponent();pc2d.points[0]=point1;pc2d.points[1]=点2;pc2d.points[2]=点3`注意此处注释中的关键提示:注意此处注释中的关键提示: