尝试使用raycaster代替OnMouseOver()来显示UI文本而没有成功

时间:2019-03-18 20:53:43

标签: android unity3d

我是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);
    }

  }

}

0 个答案:

没有答案