如何在没有碰撞器相互穿过的情况下改变接触上的精灵

时间:2016-03-21 16:27:37

标签: unity3d game-physics unity5

基本上,我来自SpriteKit背景,可以在没有碰撞的情况下建立联系。我试图在Unity2d中获得相同的效果,我想要一个物体的图像和碰撞器在通过另一个物体时从一个圆圈变为一个矩形而不会使它们反弹或对碰撞力作出反应。请参阅下面的代码:

    void OnCollisionEnter2D(Collision2D col)    {
        if (col.collider.name == "Enemy") {

        if(circleColliderOn){

            GetComponent<SpriteRenderer>().sprite = rectTargetSprite;

            boxColliderOn = true;
            boxCollider.enabled = true;
            GetComponent<CircleCollider2D>().enabled = false;
            circleColliderOn = false;

            Debug.Log("reached here");

        }
    }
}

同样在我的代码中,圆圈变为矩形,但是盒子对撞机不会增加到更大的矩形的大小,它保持不变。

更新

我从OnCollisionEnter2D更改为onTriggerEnter2D并设置了TriggerOn属性,但无法识别触发器。甚至没有显示下面更新代码中的第一个日志。我对这个问题进行了一些研究,并且已经检查了以下内容:

  • 一个游戏对象有一个rigidBody2D
  • isKinematic已停用
  • 设置两个对象的碰撞器
  • 确保游戏对象名称正确

    void OnTriggerEnter2d(Collision2D col)  {
    Debug.Log("reached here");
    
    if (col.collider.name == "Enemy") {
        if(circleColliderOn){
    
            GetComponent<SpriteRenderer>().sprite = rectTargetSprite;
    
            boxColliderOn = true;
            boxCollider.enabled = true;
            GetComponent<CircleCollider2D>().enabled = false;
            circleColliderOn = false;               
            Debug.Log("LOGGED");
            }
        }
    }
    

1 个答案:

答案 0 :(得分:0)

void OnTriggerEnter2d(Collision2D col)

将此更改为

void OnTriggerEnter2D(Collider2D col) 

方法名称很重要,必须相同,以及使用Collider而不是碰撞类作为参数。

您现在不需要col.collider.name,因此您只需将其更改为col.name http://docs.unity3d.com/ScriptReference/Collider2D.html