現在、C#で更新されたコーディングで問題が発生しています。私は教科書「3.x Game Development Essentials」を使用して作業しており、ドアに電力を供給するために充電されているバッテリーの進行状況を示すテクスチャが割り当てられた配列を作成しようとしています。教科書ではGUITextureを作成するように求められていますが、これは以前のUnityアップデートで廃止されたため、代わりにCanvasと子のゲームオブジェクトを作成するUI Imageを作成しました。これにより画面上の問題は修正されましたが、コーディングの面でさらに悪い結果が出ました。この本は、5つのテクスチャー(4つの充電状態、および元の空のテクスチャー)の配列を作成することを求めています。目標は、キャラクターがパワーセルを取得するたびに、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;
今ではさらに奇妙になっています。本は古くなったコードで動作しているため、課金の値を使用して配列からテクスチャを選択する必要があります。したがって、次のように入力する必要があります。
chargeHudGUI.texture = hudCharge[charge];
目的は、chargeHudGUI変数に割り当てられているGUITextureオブジェクト、具体的にはそのテクスチャープロパティに対処することです。まあ、それはかっこいいですが、GUITextureはもうありません。それは私にこれを残します:
chargeHudGUI.Image = hudCharge[charge].
私は何をすべきかを理解するために私ができるすべてのスレッドを調べてきましたが、この特定の問題に対処しているようには見えません。誰かがこのナンセンスをナビゲートするための指針を持っていますか?私はしばらくの間このゲームに取り組んでおり、私はそれを終わらせようと決心しています。 Visual StudioとUnity3Dの使い方を学びたい。助けてくれてありがとう!
GUITexture
は実際には GUIText と同様にdeprecatedです。 hudCharge
変数はTexture2D
のタイプなので、chargeHudGUI
をRawImage
ではなくImage
のタイプにして、割り当てられるようにします。テクスチャプロパティを直接使用します。
GameObject ---> UI ---> RawImageに移動すると、UnityはGameObjectを子としてCanvasを作成します。その子GameObjectにはRawImage
コンポーネントがあります。新しいUIシステムの詳細については、 こちら をご覧ください。
だから、交換
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;