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