У него идет значение ХХХ
Ты о чем?
Ответ первый: Ты изначально неверно подошел к задаче. Тебе не нужно конвертирование трех крестиков в компоненте в число. Визуальная часть должна просто быть связана с логикой, а логика не должна быть завязана на визуальной части.
Запомни: логика программы и графика должны быть максимально разделены. Графика берет значения логических вычислений, логика никак не трогает графику
Как я понял задачу.Есть юнит, у него есть количество жизней. На это указывает переменная LifeCount в скрипте юнита.
Используется csharp
public class Unit : MonoBehaviour
{
public int LifeCount = 3;
}
Сейчас у юнита целых 3 жизни!
Как мне сделать так, чтобы над игроком появилось три одинаковые текстуры, символизирующие жизнь, мир процветание и пончики?
Ответ второй, на правильно поставленный вопрос:1. Ты должен создать функцию OnGUI в своем скрипте. Эта функция обрабатывает графический интерфейс. Вызывается каждый кадр, так скажем. Скрипт у тебя становится таким:
Используется csharp
public class Unit : MonoBehaviour
{
public int LifeCount = 3;
void OnGUI()
{
}
}
2. Создаешь переменную типа Texture2D. В инспекторе туда ты закинешь текстуру с жизнями.
Теперь скрипт вот такой:
Используется csharp
public class Unit : MonoBehaviour
{
public Texture2D LifeTexture;
public int LifeCount = 3;
void OnGUI()
{
}
}
3. Создаешь цикл для перебора по жизням
Используется csharp
public class Unit : MonoBehaviour
{
public Texture2D LifeTexture;
public int LifeCount = 3;
void OnGUI()
{
for(int i = 0; i < LifeCount; i++)
{
}
}
}
4. В цикл записываешь действие для отображения текстуры. Пока пустое:
Используется csharp
public class Unit : MonoBehaviour
{
public Texture2D LifeTexture;
public int LifeCount = 3;
void OnGUI()
{
for(int i = 0; i < LifeCount; i++)
{
GUI.DrawTexture(new Rect(), LifeTexture);
}
}
}
5. Теперь тебе нужно перевести точку в игровом мире в точку на экране. Точно не помню какая это процедура.
Либо ViewportToScreenPoint либо WorldToScreenPoint. Скорей всего Viewport - это мировая координата относительно твоей камеры, а вторая это "глобальная мировая". Так же нужно добавить конвертирование точки экрана в точку ГУИ
В итоге получается так:
Используется csharp
public class Unit : MonoBehaviour
{
public Texture2D LifeTexture;
public int LifeCount = 3;
void OnGUI()
{
var point = GUIUtility.ScreenToGUIPoint(Camera.main.ViewportToScreenPoint(transform.position));
for(int i = 0; i < LifeCount; i++)
{
GUI.DrawTexture(new Rect(), LifeTexture);
}
}
}
6. Теперь тебе нужна переменная которая будет показывать, какого размера твоя текстура на экране, а так же переменная, которая будет показывать насколько одно сердце смещается от другого. Обрати внимание, что значения в функции так же поменялись.
Используется csharp
public class Unit : MonoBehaviour
{
public Rect LifePosAndSize;
public Vector2 LifeOffset;
public Texture2D LifeTexture;
public int LifeCount = 3;
void OnGUI()
{
var point = GUIUtility.ScreenToGUIPoint(Camera.main.ViewportToScreenPoint(transform.position));
for(int i = 0; i < LifeCount; i++)
{
GUI.DrawTexture(new Rect(point.x - LifePosAndSize.width/2 + LifePosAndSize.x + LifeOffset.x * i,
point.y - LifePosAndSize.height / 2 + LifePosAndSize.y + LifeOffset.y * i,
LifePosAndSize.width,
LifePosAndSize.height),
LifeTexture);
}
}
}
7. Последний скрипт - уже готовый. Для добавления жизней ты просто используешь LifeCount++, LifeCount+=<число>, для вычитания обратный знак, для сравнения LifeCount=<число>. Добавляй свои значения в этот скрипт, который будет висеть на твоем юните и ты будешь счастлив. Все же было просто до элементарного!
В инспекторе тебе надо будет выставить значения учитывая что:
LifePosAndSize.width/2 - половина твоей текстуры жизни. Нужна для того чтобы предмет отобразился по центру (сместить на половину себя)
LifePosAndSize.x - значение которое ты задашь сам, насколько смещена текстура, относительно точки персонажа.
LifeOffset.x - значение которое ты задашь сам, насколько смещено каждое сердце относительно другого сердца. Расстояние между ними, короче.