C# 团结。禁用碰撞物理,但调用碰撞方法

C# 团结。禁用碰撞物理,但调用碰撞方法,c#,unity3d,collision,C#,Unity3d,Collision,基本上,我有玩家对象和一堆其他的。目前,它们都有RigitBody2D,以及碰撞器,用于创建: obj = new GameObject(); obj.tag = "web"; obj.name = "web"; float randomX = Random.Range (Utilities.getMainCameraBounds ().min.x, Utilities.getMainCameraBounds ().max.

基本上,我有玩家对象和一堆其他的。目前,它们都有
RigitBody2D
,以及碰撞器,用于创建:

        obj = new GameObject();
        obj.tag = "web";    
        obj.name = "web";
        float randomX = Random.Range (Utilities.getMainCameraBounds ().min.x, Utilities.getMainCameraBounds ().max.x);
        float randomY = Random.Range (Utilities.getMainCameraBounds ().min.y, Utilities.getMainCameraBounds ().max.y);
        obj.transform.position = new Vector3(randomX, randomY);
        obj.transform.localScale = new Vector3 (3.0f, 3.0f, 3.0f);
        collider = obj.AddComponent <BoxCollider2D>();
        body = obj.AddComponent<Rigidbody2D> ();
        body.constraints = RigidbodyConstraints2D.FreezeAll;
        joint = obj.AddComponent<HingeJoint2D> ();

        renderer = obj.AddComponent<SpriteRenderer>();

        renderer.sortingOrder = 1;

        renderer.sprite = Resources.Load("Textures/dot_net", typeof(Sprite)) as Sprite;
播放器与其中一些对象发生碰撞后,调用方法
joint
,目的是将
player
web
HingeJoint2D
连接,以模拟摆锤。接头的代码:

public void joint(Rigidbody2D body) {
    WebCollection.getInstance ().turnOffColliders (body.gameObject);
    HingeJoint2D hingeJoint = webLine.getObject ().AddComponent<HingeJoint2D> ();
    hingeJoint.connectedBody = body;
    hingeJoint.anchor = new Vector2 (0.00120592f, 0.1921938f);
    hingeJoint.connectedAnchor = new Vector2 (0.1939605f, 0.03025406f);
}
public void关节(刚体){
WebCollection.getInstance().turnOffColliders(body.gameObject);
HingeJoint2D hingeJoint=webLine.getObject().AddComponent();
铰链接头。连接体=主体;
hingeJoint.anchor=新矢量2(0.001205922F,0.1921938f);
铰链接头.connectedAnchor=新矢量2(0.1939605f,0.03025406f);
}
摆锤的行为很正常,但在摆锤的瞬间,或者当玩家向网络移动时,其他
web
对象与摆锤发生碰撞,产生了真正的碰撞行为(比如相互挤压)

我的目标:我希望
web
对象在碰撞时做出反应(调用上面的方法),但在屏幕上,玩家只需扔它们

我已经尝试过的:我想关闭其他对象的实体(
WebCollection.getInstance()。关闭碰撞器(body.gameObject);)
在钟摆运动结束后,将它们转回,但这会导致非常奇怪的行为


还有一个解决方案,就是现在手动检查播放器是否与
web
对象发生碰撞,并进行处理,但我认为这是非常昂贵的

要将我的评论变成对那些发现你问题的人的回答:

如果希望碰撞器只触发事件而不与其他碰撞器发生物理碰撞,则需要触发器。要使碰撞器成为触发器,请选中inspector中碰撞器组件的Is trigger复选框(也可以通过脚本使用
Collider.IsTrigger
boolean属性进行设置)

要在触发器触发时执行操作,请使用
OnTrigger
事件(
OnTriggerEnter
OnTriggerExit
OnTriggerStay
)(请参阅)


unity还简要介绍了作为触发器的碰撞器:

您是否尝试过将碰撞器设置为触发器?我对unity非常陌生,恐怕我不了解您的意思,但我会找到一些关于它的信息当您将碰撞器组件指定给游戏对象时,碰撞器组件中有一个复选框,上面写着“是触发器”。如果您将碰撞器设置为触发器,它们将不是物理碰撞器,而是调用OnTriggerEnter事件,当碰撞器触摸(另请参见:)@xyLe_时,我将尝试并在稍后回答您,提示为thx
public void joint(Rigidbody2D body) {
    WebCollection.getInstance ().turnOffColliders (body.gameObject);
    HingeJoint2D hingeJoint = webLine.getObject ().AddComponent<HingeJoint2D> ();
    hingeJoint.connectedBody = body;
    hingeJoint.anchor = new Vector2 (0.00120592f, 0.1921938f);
    hingeJoint.connectedAnchor = new Vector2 (0.1939605f, 0.03025406f);
}