高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
2条答案
按热度按时间rxztt3cl1#
希望这对你有帮助=)
确保你的UI元素有一个不是触发器的2D碰撞器。
ou6hu8tu2#
我觉得你需要这个:事件系统.当前.当前所选游戏对象
更多关于这一点:
https://docs.unity3d.com/2018.1/Documentation/ScriptReference/EventSystems.EventSystem-currentSelectedGameObject.html