我只想在其他事件发生时实例化一个多维数据集
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
希望这对您有所帮助!
我有这个事件,我想创建一个事件来实例化一个新的多维数据集,就像在函数 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 希望这对您有所帮助!