ЕДИНСТВО - Выберите объект с Raycast - Работает на Windows, ошибки на WebGL (TouchScreen) - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу выбрать объект на сцене, касаясь его на экране.Я сделал этот код, и он отлично работает на Unity Player или когда я компилирую приложение для Windows.Когда я компилирую для WebGL, у меня странное поведение (проверено на Firefox / Chrome)

Ошибка, которую я получаю, заключается в том, что, если я удерживаю палец на объекте, я получаю многократный непрерывный щелчок вместо одногоесли я использую TouchPhase.Began.Кто-то знает, как решить эту проблему?Это известная проблема?

Вот мой код

using UnityEngine;
using System.Collections.Generic;
using System.Xml.XPath;
using UnityEngine.UI;


public class RaycastObjHit : MonoBehaviour
{


private GameObject working_object;
private GameObject touchedObject;


void Update()
{
    if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Began)
    {
        Ray ray = Camera.current.ScreenPointToRay(Input.GetTouch(0).position);
        RaycastHit hit;   

        if (Physics.Raycast(ray, out hit))
        {
            string ObjHitName = hit.transform.name;
            Debug.Log(hit.transform.name);
            if (hit.collider != null)
            {
                touchedObject = hit.transform.gameObject;

                if (touchedObject.GetComponent<Renderer>().material.color != Color.red )
                {
                    changeColor(touchedObject.transform.name, Color.red);   
                }else{
                    changeColor(touchedObject.transform.name, Color.green);   
                }

            }
                Debug.Log("Touched " + touchedObject.transform.name);
         }
     }

}
public void changeColor(string objId, Color color)
{
    working_object = GameObject.Find(objId);
    working_object.GetComponent<Renderer>().material.color = color;
}

}

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Если кто-то хочет знать, как я «решил» проблему, вот мой код.Простой обходной путь, который использует логическое значение для управления, если я продолжаю нажимать на монитор во время одного и того же события.Я повторяю, это только обходной путь для решения этой "несовместимости" с WebGL

using UnityEngine;
using System.Collections.Generic;
using System.Xml.XPath;
using UnityEngine.UI;


public class RaycastObjHit : MonoBehaviour
{

private GameObject working_object;
private GameObject touchedObject;
private bool touchBegan = false;

void Update()
{
    if (Input.touchCount == 1)
    {
        if (Input.GetTouch(0).phase == TouchPhase.Began && !touchBegan)
        {
            touchBegan = true;
            Ray ray = Camera.current.ScreenPointToRay(Input.GetTouch(0).position);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit))
            {
                string ObjHitName = hit.transform.name;
                Debug.Log(hit.transform.name);
                if (hit.collider != null)
                {
                    touchedObject = hit.transform.gameObject;

                    if (touchedObject.GetComponent<Renderer>().material.color != Color.red)
                    {
                        changeColor(touchedObject.transform.name, Color.red);
                    }
                    else
                    {
                        changeColor(touchedObject.transform.name, Color.green);
                    }

                }

                Debug.Log("Touched " + touchedObject.transform.name);
            }
        } else if (Input.GetTouch(0).phase == TouchPhase.Ended && touchBegan){
            touchBegan = false;
        }
    }

}
public void changeColor(string objId, Color color)
{
    working_object = GameObject.Find(objId);
    working_object.GetComponent<Renderer>().material.color = color;
}
}
0 голосов
/ 28 ноября 2018

Это не так, как вы делаете это в 2018 году (год, а не версия Unity).Поместите PhysicsRaycaster на вашу камеру, добавьте в EventSystem, затем внедрите IPointer *** Handler (Вниз, Вверх, Ввод, Выход, Нажмите, вы называете его).

...