GUITexture 已弃用,那么我应该使用啥来代替它?
Posted
技术标签:
【中文标题】GUITexture 已弃用,那么我应该使用啥来代替它?【英文标题】:GUITexture is deprecated, so what should I use instead of it?GUITexture 已弃用,那么我应该使用什么来代替它? 【发布时间】:2018-11-27 01:48:18 【问题描述】:我目前遇到了更新 C# 编码的问题。我正在研究一本教科书“3.x Game Development Essentials”,目前正在尝试制作一个分配有纹理的数组,该数组将显示电池充电为门供电的进程。教科书要我创建一个 GUITexture,但是这在之前的 Unity 更新中已经过时,所以我创建了一个 UI 图像,它创建了一个画布和一个子游戏对象。虽然这解决了屏幕上的问题,但编码变得更糟。这本书要我创建一个由五个纹理组成的数组(四个电荷状态,加上原始的空纹理)。目标是每当角色拿起一个电池时,它就会在 UI 画布中实时反映。现在,这就是我得到gooby的地方:
这是本书指定在我的库存脚本上实现的原始编码:
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。我很感激任何帮助!
【问题讨论】:
【参考方案1】:GUITexture
确实像GUIText 一样被弃用。由于您的hudCharge
变量是Texture2D
的类型,请将chargeHudGUI
的类型设置为RawImage
而不是Image
,以便您可以直接使用纹理属性对其进行分配。
转到 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;
【讨论】:
哈!我知道系统某处存在漏洞。从现在开始,当我想参与纹理时,我将使用 RawImage 而不是 Image。我将按照您提供的链接阅读有关新 UI 系统的信息。希望我能设法在未来解决更多的问题。你是最好的。 另外,请确保删除任何名为OnGUI
的函数,因为它也是旧的 UI 系统。我提供的链接应该可以帮助您开始使用新的 UI 系统。当涉及到检测您将来需要做的点击时,请参阅this 帖子。不客气。【参考方案2】:
public GUITexture[] colours;
变成
public Rect[] colours;
和
if (colours[0].HitTest(Input.mousePosition))
变成
if (colours[0].Contains(Input.mousePosition))
【讨论】:
以上是关于GUITexture 已弃用,那么我应该使用啥来代替它?的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS7 中,我应该使用啥来代替已弃用的 GKLeaderboardViewController?
jQuery.type() 已弃用。检查 var 是不是不是对象时,我应该使用啥来代替? [复制]
BaseJQueryEventObject、JQueryEventObject 等已弃用。我们用啥来代替它?