c# - GUITexture 已被弃用,那么我应该使用什么来代替它呢?

标签 c# visual-studio user-interface unity3d guitexture

我目前在使用 C# 更新编码时遇到问题。我正在研究一本教科书“3.x 游戏开发要点”,目前正在尝试制作一个阵列,该阵列将分配给它的纹理将显示为门供电的电池充电进度。教科书要我创建一个 GUITexture,但是这在之前的 Unity 更新中已过时,因此我创建了一个 UI Image,它创建了一个 Canvas 和一个子游戏对象。虽然这解决了屏幕上的问题,但编码时情况变得更糟。这本书要我创建一个包含五个纹理的数组(四个充电状态,加上原始的空纹理)。目标是每当角色拿起电池时,它就会实时反射(reflect)在 UI 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;

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

chargeHudGUI.texture = hudCharge[charge];

我们的目标是处理分配给 chargeHudGUI 变量的 GUITexture 对象,特别是它的纹理属性。好吧,那会很酷,但是不再有 GUITexture 那么我该何去何从?它给我留下了这个:

chargeHudGUI.Image = hudCharge[charge].

我一直在尽我所能地查看每一个线程,试图弄清楚该怎么做,但似乎没有任何方法可以解决这个特定问题。有没有人有任何指导来解决这个废话?我已经为这个游戏工作了一段时间,我决心完成它。我想学习如何使用 Visual Studio 和 Unity3D。感谢您的帮助!

最佳答案

GUITexture 确实已弃用 就像GUIText .由于您的 hudCharge 变量是 Texture2D 类型,因此请将 chargeHudGUI 设为 RawImage 而不是 Image 这样你就可以直接用texture属性给它赋值。

转到 GameObject ---> UI ---> RawImage 和 Unity 将创建一个带有 GameObject 作为子对象的 Canvas。该子游戏对象将有一个 RawImage 组件。您可以了解更多关于新UI系统的信息here .

所以,替换

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;

关于c# - GUITexture 已被弃用,那么我应该使用什么来代替它呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53491613/

相关文章:

c# - 即使在 C# 中使用 REST API 获取成功状态代码后,图像也不会在 Azure 中删除

c# - 如何向存储过程声明变量

c# - 在 C# 中实现安全的鸭子类型(duck typing)

visual-studio - 为什么 Chrome 中的控制台在 browserLink 中显示 404 not found?

visual-studio - 无法进入Nuget包

Java Swing GUI 应用程序完全空白,没有任何内容,而按钮添加到面板中

unity3d - 将内容缩放到最大的 UI 元素(Unity)

java - 使用 Swing 的 JTextField 在 Java 中打印屏幕

c# - 查看toolstripmenuitem是否被勾选

c++ - 构建简单的 Firefox 是无止境的?