我目前在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。感谢您的帮助!
答案 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)) {