在Unity 3D中为对象分配编号

时间:2018-11-08 23:07:16

标签: unity3d

我想为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;
        }
    }
}

1 个答案:

答案 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;
    }
}