首页 > 解决方案 > 如何设置 2D Colliders 和 Rigibody2D?

问题描述

我是 C# 和 Unity 的新手,所以请多多包涵。我如何检查是否有东西与跳跃垫发生碰撞,并且碰撞的对象具有 rigibody2D,以便我可以操纵对象 rigibody2d velocity.y?我查看了文档,但我仍然不明白。我在 Jump Pad 中有一个 rigibody2d Body 类型;动态,Box Collider2D 是触发器;选中,并且在我的 Box/Crate 中与 Jump Pad 相同,只有 Box Collider2D 是触发器;没有检查。这有效,但它仅适用于一个板条箱/盒子我正在寻找一种方法来检查是否有任何带有 rigibody2d 的游戏对象发生碰撞,如果是,它应该在跳跃垫上“跳跃/反弹”。

    public class JumpPad : MonoBehaviour
    {
       private GameObject _gameObject;
        private Rigidbody2D _rigibody2d;
   
         void OnTriggerEnter2D(Collider2D collider)
        {
            _gameObject = GameObject.FindGameObjectWithTag("Crate");
           _rigibody2d = _gameObject.GetComponent<Rigidbody2D>();
            _rigibody2d.velocity = new Vector2(0, 22f);
         }

任何帮助表示赞赏。感谢您的时间。

标签: c#unity3d

解决方案


对于此类情况,您可以使用该OnCollisionEnter方法。

https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html

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();
    }
}

当然也有设置OnTriggerEnter为的对撞机:IsTriggertrue

https://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html

仔细检查文档以了解差异以及哪一个适用于您的案例。

在您的情况下,我认为您需要以下内容:

   public class JumpPad : MonoBehaviour
    {
       private GameObject _gameObject;
        private Rigidbody2D _rigibody2d;
   
      void OnTriggerEnter2D(Collider2D col)
    {
        var colliderHasTag = col.gameObject.tag == "crate";

        if(!colliderHasTag)
            return;
 
        var rb = col.gameObject.GetComponent<Rigidbody2D>();
            rb.velocity = new Vector2(0, 22f);       
 
    }
      

这个想法是,当发生碰撞时,你检查你正在碰撞的对象。然后,如果它具有某些参数(例如标签“板条箱”),则应用您的操作(例如添加一堆力)。


推荐阅读