#c# #unity3d
#c# #unity3d
Вопрос:
Это скриншот текстового пользовательского интерфейса, где цифры должны отображаться, когда игрок нажимает цифры :
Если я сам введу текст в инспекторе, он покажет его :
но если в игре я нажимаю мышью на куб, например, на куб с номером 0, он не показывает 0 в текстовом интерфейсе. Я включил средство визуализации сетки с ключом 0 только для того, чтобы показать куб на нем для примера :
Независимо от того, сколько раз я нажимаю на кнопки (кубы), в текстовом интерфейсе ничего не отображается.
Этот скрипт прикреплен к каждому кубу (кнопке) :
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;
public class SecurityKeypadKeys : MonoBehaviour
{
public TextMesh text;
private void Start()
{
text = GameObject.Find("Security Keypad Text").GetComponent<TextMesh>();
}
private void OnMouseDown()
{
string[] digits = Regex.Split(transform.name, @"D ");
foreach (string value in digits)
{
int number;
if (int.TryParse(value, out number))
{
text.text = value;
}
}
}
}
И когда я использую точку останова, она переходит к событию onmousedown, и в массиве цифр есть 3 элемента, два элемента пустые, просто пустая строка, а один — цифра :
Когда строка пуста, она не попадает в строку text.text только тогда, когда есть цифра: в этом случае текст и значение оба 0 :
но когда я делаю continue и возвращаюсь к игре, текстовый интерфейс пуст.
Комментарии:
1. Вы назначаете
text.text = value;
Пробовали ли вы вместо этого использоватьtext.text = number.ToString();
.. и вы уверены, что больше ничего не меняет текст?2. Я обнаружил проблему, и это более чем смущает, у меня есть два текста пользовательского интерфейса. проблема в том, что я продублировал объект клавиатуры безопасности и забыл назначить второй текст скрипту на кнопках, и вместо этого каждое введенное число отправлялось в первый текст.
3. Это, кстати, одна большая причина (помимо производительности)
Find
, которой следует избегать 😉 вместо этого ссылайтесь на свои объекты через инспектор и пропустите свойStart
метод 🙂