GUITexture已被弃用,那么我应该使用什么而不是它呢?

L. *_*tal 6 c# user-interface unity-game-engine visual-studio guitexture

我目前遇到了C#中更新编码的问题.我正在制作一本教科书"3.x Game Development Essentials",目前正在尝试制作一个阵列,该阵列将分配纹理,这将显示电池充电的进度.教科书要我创建一个GUITexture,但是这在之前的Unity更新中已经过时了,所以我创建了一个创建Canvas和子游戏对象的UI Image.虽然这解决了屏幕上的问题,但编码时情况更糟.这本书要我创建一个由五个纹理组成的数组(四种状态,加上原始的空纹理).目标是每当角色拿起一个电池时,它会在UI Canvas中反映出来.现在,这是我得到goobery的地方:

这是本书指定在我的Inventory脚本上实现的原始编码:

public Texture2D [] hudCharge;
public GUITexture charge HudGUI;
Run Code Online (Sandbox Code Playgroud)

我最终不得不松鼠去处理旧代码,并尝试了这个:

using UnityEngine.UI;

public class Inventory : MonoBehaviour{
public static int charge = 0
public UnityEngine.AudioClip collectSound;
public UnityEngine.Texture2D[] hudCharge;
public Image chargeHudGUI;
Run Code Online (Sandbox Code Playgroud)

现在我们变得更奇怪了.因为本书使用的是过时的代码,所以它要我使用电荷值从数组中选择一个纹理.因此,它要我输入:

chargeHudGUI.texture = hudCharge[charge];
Run Code Online (Sandbox Code Playgroud)

目标是我们正在解决分配给chargeHudGUI变量的GUITexture对象,特别是它的纹理属性.嗯,这很时髦但是再也没有GUITexture了,那么它离我而去的地方呢?它让我这样:

chargeHudGUI.Image = hudCharge[charge].
Run Code Online (Sandbox Code Playgroud)

我一直在浏览每个线程,我可以尝试找出该做什么,但似乎没有解决这个特殊问题.有没有人有任何指导导航这个废话?我已经在这个游戏上工作了一段时间,我决心完成它.我想学习如何使用Visual Studio和Unity3D.我感谢任何帮助!

Pro*_*mer 7

GUITexture确实像GUIText一样被弃用。由于您的变量是 的类型,因此将其设为类型而不是,以便您可以直接使用纹理属性对其进行分配。hudChargeTexture2DchargeHudGUIRawImageImage

转到 GameObject ---> UI ---> RawImage 和 Unity 将创建一个带有 GameObject 作为子元素的 Canvas。该子 GameObject 将有一个RawImage组件。您可以在此处了解有关新 UI 系统的更多信息。

所以,更换

public Image chargeHudGUI;
Run Code Online (Sandbox Code Playgroud)

public RawImage chargeHudGUI;
Run Code Online (Sandbox Code Playgroud)

现在,您可以这样做:

chargeHudGUI.texture = hudCharge[charge];
Run Code Online (Sandbox Code Playgroud)

您仍然可以使用Image,而不是RawImage,但你必须转换Texture2DSprite每个时间或缓存然后将它们改变Image.sprite属性来显示它们。

public Image chargeHudGUI;
Run Code Online (Sandbox Code Playgroud)

那么你可以这样做:

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;
Run Code Online (Sandbox Code Playgroud)