unity3d 通过RayCast Unity与UI交互

qf9go6mv  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(267)

高2、
我有一个(我认为非常简单的)问题。我如何检测和与当前正在“光线投射”的UI元素交互?
下图显示了我想要实现的目标:

我有来自Unity文档的代码

void FixedUpdate()
{
    int layerMask = 1 << 8;

    // This would cast rays only against colliders in layer 8.
    // But instead we want to collide against everything except layer 8. The ~ operator does this, it inverts a bitmask.
    layerMask = ~layerMask;

    RaycastHit hit;
    // Does the ray intersect any objects excluding the player layer
    if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, Mathf.Infinity, layerMask))
    {
        Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow);
        Debug.Log("Did Hit");
    }
    else
    {
        Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 1000, Color.white);
        Debug.Log("Did not Hit");
    }
}

但它只允许我光线投射一个3D物体(使用碰撞器)。
我听说过图形光线投射和光线投射,但不知道如何使用它。
如果可能,我不想附加额外的脚本或额外的事件到UI元素(因为我有很多UI元素)
提前非常感谢您的投入!:D

rxztt3cl

rxztt3cl1#

var eventData = new PointerEventData(EventSystem.current);
  eventData.position = Input.mousePosition;
  var results = new List<RaycastResult>();
  EventSystem.current.RaycastAll(eventData, results);
  if(results.Where(r => r.gameObject.layer == 6).Count() > 0) //6 being my UILayer
  {
    Debug.Log(results[0].gameObject.name); //The UI Element
  }

希望这对你有帮助=)
确保你的UI元素有一个不是触发器的2D碰撞器。

相关问题