【发布时间】:2021-12-27 08:54:07
【问题描述】:
嗨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 对象(带有对撞机)。
我听说过图形 raycaster 和 raycast,但不知道如何使用它。
如果可能,我不想将额外的脚本或额外的事件附加到 UI 元素(因为我有很多 UI 元素)
非常感谢您的意见! :D
【问题讨论】:
-
所以你想移动光线投射并且 UI 中应该发生一些事情?
-
是的...,我想移动球体(使用 Raycast)并且该 raycast 应该“单击”按钮或“滚动”滚动视图...:)
-
不确定如何在 Unity 中执行,但需要将 3D 光线投射矢量投影到 2D UI 平面上,并且需要检查光线投射焦点是否在按钮/滚动条区域 - 类似这样.
-
它有点旧,但也许这对你有帮助:Using Raycast instead of Gaze Pointer
-
你所有的 UI 项目都在同一个父
Canvas中吗?
标签: c# unity3d raycasting