Unity - 将鼠标悬停在对象上时显示十字准线

Unity - Make crosshair appear when hovering over object

提问人:Kevin 提问时间:9/28/2023 更新时间:9/28/2023 访问量:68

问:

我已经这样做了几个小时,我试图让它成为这样,在拍摄光线投射时,它与带有特定标签的物体碰撞,十字准线被启用,如果没有击中带有标签的物体,它就会消失。这似乎比我预期的要难得多,我得到了奇怪的结果。

如果我先单击,则会出现十字准线,或者它确实有效并且十字准线不会再次禁用。下面是对象交互脚本的代码。请让我知道我做错了什么,谢谢!

    public Collider clickObject;
    public Animator m_Animator;

    [SerializeField] public GameObject Crosshair;

    private Ray _ray;
    private RaycastHit _hit;
    private bool _opened;

    void Start()
    {
        m_Animator = gameObject.GetComponent<Animator>();
        Crosshair.SetActive(false);
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            Click();
        }
    }

    private void Click()
    {
        if (!clickObject) return;
        if (!m_Animator) return;

        _ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(_ray, out _hit))
        {
            if (_hit.collider.CompareTag("InteractObject"))
            {
                Crosshair.SetActive(true);
            }
            else
            {
                Crosshair.SetActive(false);
            }

            if (_hit.collider == clickObject)
            {
                if (_opened)
                {
                    m_Animator.SetBool("isOpen", true);
                    _opened = false;
                }
                else
                {
                    m_Animator.SetBool("isOpen", false);
                    _opened = true;
                }
            }
        }
    }
}
C# unity-游戏引擎 碰撞检测 光线投射

评论

0赞 BugFinder 9/28/2023
不应该发生任何事情,因为 clickobject 永远不会被设置
0赞 Kevin 9/28/2023
我应该在什么时候引用它?
0赞 BugFinder 9/28/2023
这是您的代码:P我不知道你想要它做什么,所以你需要在某个时候设置它

答:

2赞 Geode 9/28/2023 #1

好吧,似乎您只是在函数中进行光线投射并更新十字准线,只有在按下鼠标左键时才能调用该函数:Click()

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            Click();
        }
    }

我认为,如果您希望十字准线在没有任何用户输入的情况下出现和消失,则希望将其称为每一帧。

评论

0赞 Kevin 9/28/2023
比如我应该创建一个名为“Active Cross Hair”的函数,当单击鼠标按钮时,它就会显示出来?但我也想让它在看物体时出现
0赞 KiynL 9/28/2023 #2

为此,我建议您在 RaycastPro 中使用 PointerRay。在这种情况下,您将可以很好地控制相机的图章和光线。

PointerRay

辅助事件,用于关闭或使用 Stamp 自动隐藏,无论您想要哪个。

Events

将您的 CrossHair 作为图章添加到光线中,并按如下方式进行设置。确保已启用 AutoHidestampOnHit

enter image description here