C# 如何设置2D碰撞器和Rigibody2D?

C# 如何设置2D碰撞器和Rigibody2D?,c#,unity3d,C#,Unity3d,我是C#and Unity的新手,所以请容忍我。我如何检查是否有物体与跳板发生碰撞,并且碰撞的物体有一个rigibody2D,这样我就可以操纵物体rigibody2D的速度。y?我看了文档,但还是不明白。我在跳台上有一个rigibody2d体型;动态,框碰撞R2D为触发器;选中,并且在与跳转板相同的我的箱子/板条箱中,只有箱子碰撞R2D被触发;没有检查。 这是可行的,但它只适用于一个板条箱/盒子。我正在寻找一种方法来检查是否有任何带有rigibody2d的游戏对象发生碰撞,如果是,它应该在跳转板

我是C#and Unity的新手,所以请容忍我。我如何检查是否有物体与跳板发生碰撞,并且碰撞的物体有一个rigibody2D,这样我就可以操纵物体rigibody2D的速度。y?我看了文档,但还是不明白。我在跳台上有一个rigibody2d体型;动态,框碰撞R2D为触发器;选中,并且在与跳转板相同的我的箱子/板条箱中,只有箱子碰撞R2D被触发;没有检查。 这是可行的,但它只适用于一个板条箱/盒子。我正在寻找一种方法来检查是否有任何带有rigibody2d的游戏对象发生碰撞,如果是,它应该在跳转板上“跳跃/反弹”。
公共级跳线板:单行为
{
私人游戏对象(GameObject);;
私有刚体2d_rigibody2d;
void OnTriggerEnter2D(碰撞的R2D碰撞器)
{
_gameObject=gameObject.FindGameObjectWithTag(“板条箱”);
_rigibody2d=_gameObject.GetComponent();
_rigibody2d.velocity=新矢量2(0,22f);

}
对于此类情况,您可以使用
OnCollisionCenter
方法


这个想法是,当发生碰撞时,你检查你正在碰撞的物体。然后,如果它有某些参数(如标签“板条箱”),你应用你的动作(如添加一束力).

谢谢你的反馈,我会调查的。我真的很感激你的回复有多快,还有一个问题是寻找标签资源,我会有多个板条箱/盒子。那很好-担心性能问题,当它成为问题时,首先获得一些经验。不要使用
Gameobject.Find(字符串名称)
而使用findbytags等,以便在必要时尽量减少搜索时间。我得到一个错误运算符“!”不能应用于“string”类型的操作数。我试图检查它是否为真(colliderHasTag==“crate”),但它对所有游戏对象都有效,而不仅仅是标记“crate”@DenisGalla确保该行是
var colliderHasTag=col.gameObject.tag==“板条箱”
而不是
var colliderHasTag=col.gameObject.tag=“板条箱”
(等于运算符,而不是赋值运算符)@DenisGalla我在发布这个答案时犯了一个错误-永远不要公然从互联网上复制代码;)如果这能解决您的问题,请确保将答案标记为已接受,否则如果仍然需要了解一些信息,请告诉我。
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    AudioSource audioSource;

    void Start()
    {
        audioSource = GetComponent<AudioSource>();
    }

    void OnCollisionEnter(Collision collision)
    {
        foreach (ContactPoint contact in collision.contacts)
        {
            Debug.DrawRay(contact.point, contact.normal, Color.white);
        }
        if (collision.relativeVelocity.magnitude > 2)
            audioSource.Play();
    }
}