为Unity 3D中的对象指定编号



我想给Unity 3D中的对象分配一个数字,这个数字应该出现在对象上。求你了,我需要代码方面的帮助。我对C#知之甚少,但这些天我一直在积极学习。我将感谢任何帮助。谢谢下面是我分配给每个对象的示例代码。

public class NumberHolder : MonoBehaviour 
{
int myNumber = 0;
UnityEngine.UI.Text myTextField;
void Awake() 
{
myNumber = UnityEngine.Random.Range(0,100) + 1;
myTextField = GetComponent<UnityEngine.UI.Text>();
}
void Start() 
{
if(myTextField != null) 
{
myTextField.text = "" + myNumber;
}
}
}

请尝试下面的脚本。它应该包含一些花絮来指导你。需要注意的几点是:对于这个脚本,你的对象必须有一个对撞机(无论是2D还是3D(。此外,只有当鼠标悬停在对象上时,此脚本才会显示对象的编号。我可以定制它,让它总是显示对象,但我必须让你工作一点。另外,我认为从长远来看,这对你来说会很好,因为你可以仔细分析它

我会给你一个提示。在对象的位置绘制文本的秘密是什么?

您需要将对象的世界空间坐标转换为屏幕空间坐标,然后覆盖文本。

请考虑以下代码块。

这些方法确定屏幕上的mouseposition是否在对象上方:

private void OnMouseEnter()
{
isVis = true;       
}
private void OnMouseExit()
{
isVis = false;        
}

这些线在鼠标位置绘制对象编号:

Vector2 mospos = Input.mousePosition;
mospos.y = Screen.height - mospos.y;
if (isVis)
{
GUI.Box(new Rect(Input.mousePosition.x + 2, Screen.height -
Input.mousePosition.y + 2, 128, 72),"" + myNumber);
}

下面的全班同学。希望它能有所帮助!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LocalLabelingScript : MonoBehaviour {
Monster beast;
bool isVis = false;
int myNumber;
private void Awake()
{
myNumber = UnityEngine.Random.Range(0,100) + 1;
}
private void OnGUI()
{
Vector2 mospos = Input.mousePosition;
mospos.y = Screen.height - mospos.y;
if (isVis)
{
GUI.Box(new Rect(Input.mousePosition.x + 2, Screen.height - 
Input.mousePosition.y + 2, 128, 72),"" + myNumber);
}
private void OnMouseEnter()
{
isVis = true;
}
private void OnMouseExit()
{
isVis = false;
}
}

最新更新