GUITexture 已被弃用,那么我应该使用什么来代替它呢?
GUITexture is deprecated, so what should I use instead of it?
我目前遇到了更新 C# 编码的问题。我正在研究一本教科书“3.x 游戏开发要点”,目前正在尝试制作一个数组,该数组将分配给它的纹理将显示为门供电的电池充电进度。教科书要我创建一个 GUI 纹理,但是这在之前的 Unity 更新中已过时,因此我创建了一个 UI 图像,该图像创建了一个 Canvas 和一个子游戏对象。虽然这解决了屏幕上的问题,但编码时情况变得更糟。这本书要我创建一个包含五个纹理的数组(四个充电状态,加上原始的空纹理)。目标是每当角色拿起电池时,它就会在 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 对象,特别是它的纹理 属性。好吧,那就是 groovy,但是 GUITexture 已经不存在了,那我该何去何从呢?它给我留下了这个:
chargeHudGUI.Image = hudCharge[charge].
我一直在尽我所能地查看每一个线程,试图弄清楚该怎么做,但似乎没有任何方法可以解决这个特定问题。有没有人有任何指导来解决这个废话?我已经为这个游戏工作了一段时间,我决心完成它。我想学习如何使用 Visual Studio 和 Unity3D。感谢您的帮助!
GUITexture
确实 已弃用 ,就像 一样。由于您的 hudCharge
变量是 Texture2D
的类型,因此请将 chargeHudGUI
设为 RawImage
而不是 Image
的类型,以便您可以直接将其分配给纹理属性。
转到 GameObject ---> UI ---> RawImage 和 Unity 将创建一个 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;
public GUITexture[] colours;
变成
public Rect[] colours;
和
if (colours[0].HitTest(Input.mousePosition)) {
变成
if (colours[0].Contains(Input.mousePosition)) {
我目前遇到了更新 C# 编码的问题。我正在研究一本教科书“3.x 游戏开发要点”,目前正在尝试制作一个数组,该数组将分配给它的纹理将显示为门供电的电池充电进度。教科书要我创建一个 GUI 纹理,但是这在之前的 Unity 更新中已过时,因此我创建了一个 UI 图像,该图像创建了一个 Canvas 和一个子游戏对象。虽然这解决了屏幕上的问题,但编码时情况变得更糟。这本书要我创建一个包含五个纹理的数组(四个充电状态,加上原始的空纹理)。目标是每当角色拿起电池时,它就会在 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 对象,特别是它的纹理 属性。好吧,那就是 groovy,但是 GUITexture 已经不存在了,那我该何去何从呢?它给我留下了这个:
chargeHudGUI.Image = hudCharge[charge].
我一直在尽我所能地查看每一个线程,试图弄清楚该怎么做,但似乎没有任何方法可以解决这个特定问题。有没有人有任何指导来解决这个废话?我已经为这个游戏工作了一段时间,我决心完成它。我想学习如何使用 Visual Studio 和 Unity3D。感谢您的帮助!
GUITexture
确实 已弃用 ,就像 hudCharge
变量是 Texture2D
的类型,因此请将 chargeHudGUI
设为 RawImage
而不是 Image
的类型,以便您可以直接将其分配给纹理属性。
转到 GameObject ---> UI ---> RawImage 和 Unity 将创建一个 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;
public GUITexture[] colours;
变成
public Rect[] colours;
和
if (colours[0].HitTest(Input.mousePosition)) {
变成
if (colours[0].Contains(Input.mousePosition)) {