我是3D艺术家,而不是程序员,所以我需要一点帮助。我正在尝试在Unity for Android上进行360度虚拟导览。
我几乎可以根据需要进行所有工作。但是我正在努力显示我在球体(使用精灵)和UI文本中创建的一些“热点”上的信息。
我使用的是我在youtube上发现的Xenosmash Games上的JONATHAN GONZALEZ的代码(感谢Jon)。它适用于PC甚至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一起使用,当屏幕的“中心”指向航路点(精灵)时显示UI文本。
谢谢!
这是我对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);
}
}
}