从Unity中的外部脚本检查冲突

约翰

我有以下脚本应该用于检测两个对象之间的碰撞(BoxCollider2D是触发器,CircleCollider2D是普通对撞机)

public class ArcadeScore : MonoBehaviour {

    public BoxCollider2D bc;
    public CircleCollider2D cc;

    private int score;

    // Use this for initialization
    void Start () {
        score = 0;
    }

    // Update is called once per frame
    void Update ()
    {
        if (bc.IsTouching(cc))
        {
            Debug.Log("collision detected");
            score++;
        }
    }
}

但是该脚本不会在控制台中显示任何内容,因此我想知道是否可以通过外部脚本检测触发器和正常对撞机之间的碰撞?

程序员

您必须使用OnCollisionEnter2D不是IsTouching。IsTouching用于检测他们何时触摸框架,但这可能不是正确的。Ť他的脚本OnCollisionEnter2D功能必须连接到游戏对象与对撞机不是一个空的游戏物体。

问题是我不断销毁该对象,所有值都恢复为0

您必须分离游戏逻辑,使用在运行时破坏的对象对系统代码进行评分。基本上,您的游戏逻辑,计分系统代码不应附加到破坏自身的对象上。它们应附加到一个空的GameObject。

诀窍是找到分数系统对象,获取其脚本,然后在破坏碰撞对象之前更新分数。

ScoreSystem脚本(附加到一个空的GameObject):

public class ArcadeScore : MonoBehaviour 
{
    public int score;

    // Use this for initialization
    void Start () {
        score = 0;
    }
}

Collsion脚本(使用Collider附加到GameObject):

public class CollsionScript: MonoBehaviour 
{
    ArcadeScore scoreSys;

    void Start()
    {
        //Find the ScoreSystem GameObject
        GameObject obj = GameObject.Find("ScoreSystem");
        //Get the ArcadeScore script
        scoreSys = obj.GetComponent<ArcadeScore >();
    }

    void OnCollisionEnter2D(Collision2D coll) 
    {
        if (coll.gameObject.tag == "YourOtherObject")
        {
            scoreSys.score++;
            //You can now destroy object
            Destroy(gameObject);
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章