9

我目前在 C# 中遇到更新编码的问题。我正在研究一本教科书“3.x Game Development Essentials”,目前正在尝试制作一个分配有纹理的数组,该数组将显示电池充电为门供电的进程。教科书要我创建一个 GUITexture,但是这在之前的 Unity 更新中已经过时,所以我创建了一个 UI 图像,它创建了一个画布和一个子游戏对象。虽然这解决了屏幕上的问题,但编码变得更糟。这本书要我创建一个由五个纹理组成的数组(四个电荷状态,加上原始的空纹理)。目标是每当角色拿起一个电池时,它就会在 UI 画布中实时反映。现在,这就是我变得愚蠢的地方:

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

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。我很感激任何帮助!

4

2 回答 2

7

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

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

所以,更换

public Image chargeHudGUI;

public RawImage chargeHudGUI;

现在,您可以这样做:

chargeHudGUI.texture = hudCharge[charge];

您仍然可以使用Image,但您必须每次RawImage转换为Texture2D或缓存它们,然后更改属性以显示它们。SpriteImage.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;
于 2018-11-27T02:19:50.223 回答
0
public GUITexture[] colours; 

变成

public Rect[] colours; 

if (colours[0].HitTest(Input.mousePosition)) { 

变成

if (colours[0].Contains(Input.mousePosition)) {
于 2021-06-21T19:09:48.083 回答