Присвойте номер объекту в Unity 3D - PullRequest
0 голосов
/ 09 ноября 2018

Я хочу назначить номер объектам в 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 голосов
/ 09 ноября 2018

Попробуйте скрипт ниже. Он должен содержать некоторые лакомые кусочки, чтобы направить вас. Пара вещей, на которые следует обратить внимание: для этого сценария у вашего объекта должен быть коллайдер (не имеет значения, какой тип: 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...