我想为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;
}
}
}
答案 0 :(得分:0)
尝试以下脚本。它应该包含一些引导您的花絮。需要注意的几件事:对于此脚本,您的对象必须具有对撞机(与哪种类型无关: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;
}
}