Попытка использовать raycaster вместо OnMouseOver () для отображения текста пользовательского интерфейса без успеха - PullRequest
2 голосов
/ 18 марта 2019

Я 3D художник, а не программист, поэтому мне нужна небольшая помощь.Я пытаюсь сделать 360 виртуальный тур по Unity для Android.

У меня почти все работает, как нужно.Но я изо всех сил пытаюсь отобразить информацию о некоторых «горячих точках», которые я создал в сферах (используя спрайты) и текст пользовательского интерфейса.

Я использую код от JONATHAN GONZALEZ в Xenosmash Games, который я нашел на youtube (спасибоJon).Он хорошо работает при наведении курсора на ПК или даже на Android.Проблема в том, что на Android я должен сначала коснуться где-нибудь на экране, чтобы «вызвать» курсор мыши, а другая проблема заключается в том, что он не центрирован на экране, он появляется там, где я касаюсь (мне нужно, чтобы он был в центреэкран, так как я использую гироскопический вход для поворота камеры).

Мне нужно изменить код, чтобы все работало без первоначального нажатия на экран.

Поэтому я попытался использоватьraycaster вместо позиции мыши, но без успеха.

Вот код, который я сейчас использую (работает с наведением мыши):

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class displayUI: MonoBehaviour {

  public string myString;
  public Text myText;
  public float fadeTime;
  public bool displayInfo;

  // Use this for initialization
  void Start() {
    myText.color = Color.clear;
    Cursor.lockState = CursorLockMode.Locked;
    Cursor.visible = true;
    Input.GetMouseButtonDown(0);
  }


  // Update is called once per frame
  void Update() {

    FadeText();

    if (Input.GetKeyDown(KeyCode.Escape)) {
      Input.GetMouseButtonDown(0);
    }
  }

  void OnMouseOver() {
    displayInfo = true;
  }

  void OnMouseExit() {
    displayInfo = false;
  }

  void FadeText() {
    if (displayInfo) {
      myText.text = myString;
      myText.color = Color.Lerp(myText.color, Color.white, fadeTime * Time.deltaTime);
    } else {
      myText.color = Color.Lerp(myText.color, Color.clear, fadeTime * Time.deltaTime);
    }
  }

}

Я хотел бы адаптировать его так, чтобы он работалс помощью raycaster, отображающего текст пользовательского интерфейса, когда «центр» экрана указывает на путевую точку (спрайт).

Заранее спасибо!

Вот попытка, которую я сделал с raycaster без успеха:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class displayUI: MonoBehaviour {

  public string myString;
  public Text myText;
  public float fadeTime;
  public bool displayInfo;
  private bool hitSuccess = false;

  // Use this for initialization
  void Start() {
    myText.color = Color.clear;
    Cursor.lockState = CursorLockMode.Locked;
    Cursor.visible = true;
    Input.GetMouseButtonDown(0);
  }

  // Update is called once per frame
  void Update() {
    FadeText();
    if (Input.GetKeyDown(KeyCode.Escape)) {
      Input.GetMouseButtonDown(0);
    }
  }

  void OnMouseOver() {
    displayInfo = true;
  }

  void OnMouseExit() {
    displayInfo = false;
  }

  void FadeText() {
    Vector3 fwd = transform.TransformDirection(Vector3.forward);
    RaycastHit hit;
    if (Physics.Raycast(transform.position, fwd, out hit, 2)) {

      if (hit.collider.gameObject.tag == "AmbienteTrabalho") {
        hitSuccess = true;
      }

      if (hitSuccess) {
        myText.text = myString;
        myText.color = Color.Lerp(myText.color, Color.white, fadeTime * Time.deltaTime);
      }

    } else {
      myText.color = Color.Lerp(myText.color, Color.clear, fadeTime * Time.deltaTime);
    }

  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...