unity3d 在Unity中处理游戏对象子对象的鼠标点击事件最简单的方法是什么?

xu3bshqb  于 2023-02-05  发布在  其他
关注(0)|答案(1)|浏览(187)

我创建了一个空的GameObject(名为FileCabinet),并指定了4个预置作为子对象(CabinetFrame、Drawer01、Drawer02和Drawer03)。
我希望能够单击任何抽屉来打开它们,但到目前为止,我所尝试的一切都会在单击项目时返回父GameObject FileCabinet,而不是任何子项。
当任何抽屉子对象被单击时,调用方法的最佳/最简单的方法是什么?

    • 更新日期:**

@LoïcLeGrosFrère提供了一个解决方案,最终成功了。我最初遇到的问题是事件不触发,因为我的UI阻止了对3D文件柜对象的光线投射。我通过添加Canvas Group组件到Canvas并取消选中Blocks Raycasts来解决这个问题。但这禁用了我所有的UI组件。然后我将画布组组件添加到各个UI面板中,并选中忽略父组。我不确定这是否是处理光线投射冲突的正确方法,但它确实对我有效。

zhte4eai

zhte4eai1#

我认为最简单的方法是:
Physics Raycaster组件添加到相机。
使用Input System UI Input ModuleEvent System添加到场景中。
然后,将此脚本添加到您的抽屉中:

using UnityEngine;
using UnityEngine.EventSystems;

public class Drawer : MonoBehaviour, IPointerClickHandler
{
    public void OnPointerClick(PointerEventData eventData)
    {
        Debug.Log($"Open {gameObject.name}.");
    }
}

相关问题