GUITexture устарела, так что я должен использовать вместо нее? - PullRequest
0 голосов
/ 27 ноября 2018

У меня сейчас проблема с обновленным кодированием в C #.Я работаю над учебником «3.x Основы разработки игр» и в настоящее время пытаюсь создать массив, которому будут присвоены текстуры, которые будут отображать процесс зарядки батареи для питания двери.Учебник хочет, чтобы я создал GUITexture, однако это было сделано устаревшим в предыдущем обновлении Unity, поэтому я вместо этого создал UI Image, который создал Canvas и дочерний игровой объект.Хотя это решило проблему на экране, с кодированием все стало хуже.Книга хочет, чтобы я создал массив из пяти текстур (четыре состояния заряда плюс оригинальная пустая текстура).Цель состоит в том, чтобы каждый раз, когда персонаж поднимал ячейку власти, он отражал прямую трансляцию в пользовательском интерфейсе.Теперь вот где я получаю обман:

Это оригинальное кодирование, которое книга указывает для реализации в моем сценарии инвентаризации:

public Texture2D [] hudCharge;
public GUITexture charge HudGUI;

В конечном итоге мне пришлось работать коротко, чтобы обойти старый коди попробовал это:

using UnityEngine.UI;

public class Inventory : MonoBehaviour{
public static int charge = 0
public UnityEngine.AudioClip collectSound;
public UnityEngine.Texture2D[] hudCharge;
public Image chargeHudGUI;

Теперь мы получаем еще более странный.Поскольку книга работает с устаревшим кодом, она хочет, чтобы я использовал значение заряда, чтобы выбрать текстуру из массива.Таким образом, он хочет, чтобы я набрал:

chargeHudGUI.texture = hudCharge[charge];

, цель в том, чтобы мы обращались к объекту GUITexture, который назначен переменной chargeHudGUI, в частности к его свойству текстуры.Ну, это было бы здорово, но GUITexture больше нет, так что же меня это оставит?Это оставляет меня с этим:

chargeHudGUI.Image = hudCharge[charge].

Я просматривал все возможные темы, чтобы попытаться выяснить, что делать, но, похоже, ничто не решает эту конкретную проблему.У кого-нибудь есть указатели для навигации по этой ерунде?Я работал над этой игрой некоторое время, и я полон решимости закончить ее.Я хочу узнать, как использовать Visual Studio и Unity3D.Я ценю любую помощь!

1 Ответ

0 голосов
/ 27 ноября 2018

GUITexture действительно устарело точно так же, как GUIText .Поскольку ваша переменная hudCharge является типом Texture2D, сделайте chargeHudGUI типом RawImage вместо Image, чтобы вы могли назначить ее непосредственно с помощью свойства текстуры.

Перейдите в GameObject ---> UI ---> RawImage и Unity создадут Canvas с GameObject в качестве дочернего элемента.Этот дочерний GameObject будет иметь компонент RawImage.Вы можете узнать больше о новой системе пользовательского интерфейса здесь .

Итак, замените

public Image chargeHudGUI;

на

public RawImage chargeHudGUI;

Теперь вы можете сделатьэто:

chargeHudGUI.texture = hudCharge[charge];

Вы по-прежнему можете использовать Image вместо RawImage, но вам нужно конвертировать Texture2D в Sprite каждый раз или кэшировать их, а затем изменить Image.spriteсвойство для их отображения.

public Image chargeHudGUI;

тогда вы можете сделать это:

Texture2D tex = hudCharge[charge];
//Create Sprite from the Texture2D
Sprite tempSprite = Sprite.Create(tex, new Rect(0.0f, 0.0f, tex.width, tex.height), new Vector2(0.5f, 0.5f), 100.0f);
//Change the Sprite
chargeHudGUI.sprite = tempSprite;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...