我只想在其他事件发生时实例化一个多维数据集

I want instantiate a cube only when other event ocurrs

我有这个事件,我想创建一个事件来实例化一个新的多维数据集,就像在函数 OnPointerEnter 上一样,可以统一创建指向 OnPointerEnter 的事件。如何?我正在尝试使用事件触发功能,但我不想要 "on Pointer Click event" 如果可能的话我想要 "double click event" 或混合现实工具包中的类似事件触发器...作为创建新多维数据集的空中点击事件.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Microsoft.MixedReality.Toolkit.Input;

public class Touchablecube : MonoBehaviour, IMixedRealityPointerHandler
{

    Color colorBlue = Color.blue;
    Renderer rend;
    GameObject cube;

    public void OnPointerClicked(MixedRealityPointerEventData eventData)
    {
        rend.material.color = colorBlue;
        //Vector3 v = new Vector3(
        //                eventData.Pointer.Position.x,
        //                eventData.Pointer.Position.y,
        //                eventData.Pointer.Position.z);

    }


    public void OnPointerDown(MixedRealityPointerEventData eventData)
    {
        rend.material.color = Color.red;

    }

    public void OnPointerDragged(MixedRealityPointerEventData eventData)
    {
        rend.material.color = Color.yellow;
        Vector3 v = new Vector3(
                           eventData.Pointer.Position.x,
                           eventData.Pointer.Position.y,
                           eventData.Pointer.Position.z);
        rend.transform.position = v;

    }

    public void OnPointerUp(MixedRealityPointerEventData eventData)
    {
        rend.material.color = Color.green;


    }

    public void OnPointerEnter()
    {
        cube = (GameObject)Resources.Load("Cube", typeof(GameObject));
        var obsIns = Instantiate(cube, transform.position, transform.rotation);
        obsIns.SetActive(true);
    }

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        rend = GetComponent<Renderer>();
    }

}

在 MRTK 中,单击控制器时会触发 OnPointerClicked 事件。例如,HoloLens 1 和 2 的点击是隔空点击手势,VR 中的点击是按下控制器上的触发按钮。在播放模式下,也可以使用输入模拟在编辑器中模拟点击。要使用输入模拟,请按住 space 栏以显示输入模拟手,然后单击鼠标以在播放模式期间模拟手的点击。 Information about the Input Simulation

默认情况下,如果游戏对象处于焦点状态,则会触发指针事件。如果你想全局使用指针事件,IMixedRealityPointerHandler需要像这样全局注册:

    private void OnEnable()
    {
        CoreServices.InputSystem?.RegisterHandler<IMixedRealityPointerHandler>(this);
    }
    private void OnDisable()
    {
        CoreServices.InputSystem?.UnregisterHandler<IMixedRealityPointerHandler>(this);
    }

您可以通过将 OnPointerEnter() 函数移动到 OnPointerClicked 来创建一个点击立方体。在下面的代码片段中点击的位置创建了一个多维数据集:

    private void OnEnable()
    {
        CoreServices.InputSystem?.RegisterHandler<IMixedRealityPointerHandler>(this);
    }
    private void OnDisable()
    {
        CoreServices.InputSystem?.UnregisterHandler<IMixedRealityPointerHandler>(this);
    }

    public void OnPointerClicked(MixedRealityPointerEventData eventData)
    {
        Debug.Log("OnPointerClicked");
        OnPointerEnter(eventData.Pointer.Position);
    }

    public void OnPointerEnter(Vector3 cubePosition)
    {
        GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
        cube.transform.localScale = Vector3.one * 0.1f;
        cube.transform.position = cubePosition;   
    }

Gif of code snippet 希望这对您有所帮助!