GUITexture已弃用,所以我应该用它代替它?

时间:2018-11-27 01:48:18

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

我目前在C#中遇到更新编码问题。我正在编写教科书“ 3.x Game Development Essentials”,目前正在尝试制作一个阵列,该阵列将分配有纹理,以显示为门供电的电池充电过程。教科书要我创建一个GUITexture,但是在先前的Unity更新中这已作废,因此我创建了一个UI图像,该图像创建了Canvas和子Game Object。虽然这可以解决屏幕上的问题,但编码变得更糟。这本书要我创建一个包含五个纹理的数组(四个电荷状态以及原始的空纹理)。目标是角色拾取动力电池时,它将实时反映在UI画布中。现在,这是我得到傻瓜的地方:

这是本书指定要在我的清单脚本上实施的原始代码:

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];

目标是要解决分配给chargeHudGUI变量的GUITexture对象,特别是其纹理属性。好吧,这很古怪,但是现在没有GUITexture了,那怎么办?这让我有了:

chargeHudGUI.Image = hudCharge[charge].

我一直在仔细研究所有可以尝试解决的问题,但是似乎没有什么可以解决这个特殊问题的。没有人有任何指针可以绕开这个废话吗?我从事此游戏已有一段时间了,我决心将其完成。我想学习如何使用Visual Studio和Unity3D。感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

GUITexture确实已已弃用,就像GUIText 一样。由于您的hudCharge变量是Texture2D的类型,因此请使chargeHudGUI的类型为RawImage而不是Image,以便您可以直接将其与纹理一起分配属性。

转到GameObject ---> UI ---> RawImage,Unity将创建一个以GameObject作为子代的Canvas。该子GameObject将具有一个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;

答案 1 :(得分:0)

public GUITexture[] colours; 

变成

public Rect[] colours; 

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

变成

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