Как динамически создать OnPointerDownMixedRealityPointerEventData в кубе? - PullRequest
0 голосов
/ 19 февраля 2020

Я работаю с версией MRTK 2.3.0, я создал перетаскиваемый куб, когда «указатель события вниз» создает новый куб игрового объекта, но у нового куба нет события. Я хочу назначить событие для его перемещения. Как можно назначить событие по коду?

    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;

        public void OnPointerClicked(MixedRealityPointerEventData eventData)
        {
            rend.material.color = colorBlue;
        }


        public void OnPointerDown(MixedRealityPointerEventData eventData)
        {
            rend.material.color = Color.red;
            GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            cube.transform.position = new Vector3(0,0,2);

            cube.SetActive(true);


        }

        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;   
        }

1 Ответ

1 голос
/ 19 февраля 2020

Вы можете добавить PointerHandler к себе и добавить к нему слушателей. Вот как вы можете добавить слушателя, который меняет цвет куба, из вашего примера кода:

        public void OnPointerDown(MixedRealityPointerEventData eventData)
        {
            rend.material.color = Color.red;
            GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            cube.transform.position = new Vector3(0,0,2);
            var pointerHandler = target.AddComponent<PointerHandler>();
            pointerHandler.OnPointerDown.AddListener((e) => material.color = Color.green);
            pointerHandler.OnPointerUp.AddListener((e) => material.color = Color.magenta);
            cube.SetActive(true);

        }

Дополнительные примеры см. В Как добавить почти интерактивность и указатели .

...