首页 > 解决方案 > 如何检测在 Unity 中手动添加的线渲染器对碰撞器的触摸?

问题描述

我已经通过在线条周围实例化它手动为线条渲染器添加了一个胶囊碰撞器。我已经在这个场景中添加了不同的精灵。我通过在主相机上使用Physics2D Raycaster和在脚本中检测到这些精灵顶部的触摸IPointerEnterHandler的帮助并将它们放入包含精灵渲染器的所需游戏对象中。下面给出的示例代码

添加了 3d 对撞机

 public class TouchDetect:MonoBehaviour,IPointerEnterHandler,IPointerExitHandler
    {

     public void OnPointerEnter(PointerEventData eventData)
      {
        if (eventData.pointerEnter.gameObject.name == "redcircle2(Clone)" )
            {
                sound[1].source.clip = sound[1].clip;
                sound[1].source.loop = true;
                sound[1].source.Play();
            }
       }

    }

我添加的胶囊对撞机是 3d 对撞机。如何检测对撞机顶部的触摸以及 2d 对撞机?

我已经尝试了下面的代码,但没有工作。

     if (Input.touchCount > 0 || Input.GetMouseButton(0))
      {
       Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
       bool collided = this.GetComponent<CapsuleCollider>().bounds.Contains(mousePos);




                if (collided)
                {
                    Debug.Log("Touched collider " );
                }
                else
                {
                    Debug.Log("Not collided");
                }
    }

标签: c#unity3d2d

解决方案


if (eventData.pointerEnter.gameObject.name == "redcircle2(Clone)")

我很确定这条线是错误的来源。如果您正在实例化,那么我将猜测您正在从公共 Transform 实例化,并且您已将一些已添加碰撞的 Prefab 放入其中,对吗?然后检查您添加的 THAT PREFAB 具有的游戏标签并检测到,而不是"redcircle2(Clone)".


推荐阅读