先日は皆様のおかげで、スクリプトから画像を貼り付けることができました。
ありがとうございました。
イメージいただくのは対戦格闘ゲームのキャラクターセレクト画面です。
メインプログラム「C_sel」から
ユーザーが選択しているキャラクターの番号「pushcntone」を取ってきて、
2DObjectのSpriteに指定された画像を貼る、という流れになります。
条件分岐のSwitchを使って
カットペーストで貼り付けのスクリプトを繰り返す。
>同一の変数を使わないでくださいエラー
>じゃぁ別名にするか
>変数の宣言位置をクラス頭にすれば良いのかな?
という過程を経て、一旦動くようになっているのですが、その過程の中で、なんでだろう、
と思うことがあったので、ご教授頂けたらと思います。
Unity
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Char : MonoBehaviour 6{ 7 public C_sel c_sel; //C_sel.csの関数を使うんだよ。 8 bool reDraw; //描画処理をするかどうか、受け取るのだよ 9 int pcOne; //C_sel内のpushcntone(プレイヤー選択キャラ番号の受け子) 10 11 //君の立ち位置がわからない!!!// 12 string BASE_TEXTURE = null;// 13 14 15 // Start is called before the first frame update 16 void Start() 17 { 18 c_sel = GameObject.Find("GameObject").GetComponent<C_sel>(); 19 reDraw = c_sel.ReDraw;//描画条件を受け取るTrueのとき描画 20 pcOne = c_sel.pushcntone;//選択しているキャラクタ番号を受け取る 21 } 22 23 // Update is called once per frame 24 void Update() 25 { 26 reDraw = c_sel.ReDraw;//描画条件を受け取るTrueのとき描画 27 pcOne = c_sel.pushcntone;//選択しているキャラクタ番号を受け取る 28 string BASE_TEXTURE;//アセットの位置データを受け取る器 29 Sprite sprites;//画像データを受け取る器 30 GameObject target;//書き込み対象を記憶 31 SpriteRenderer spriteOb;書き込み対象 32 33 if (reDraw == true) 34 { 35 //描画条件発生 36 switch (pcOne) 37 { 38 case 0: 39 Debug.Log("条件0"); 40 BASE_TEXTURE = "Textures/DTAC001"; 41 //ここから4行のスクリプトは一緒 42 sprites = Resources.Load<Sprite>(BASE_TEXTURE); 43 target = GameObject.Find("Char"); // 44 spriteOb = target.GetComponent<SpriteRenderer>(); // 45 spriteOb.sprite = sprites; // 46 break; 47 case 1: 48 Debug.Log("条件1"); 49 BASE_TEXTURE = "Textures/DTAC002"; 50 //ここから4行のスクリプトは一緒 51 sprites = Resources.Load<Sprite>(BASE_TEXTURE); // 52 target = GameObject.Find("Char"); // 53 spriteOb = target.GetComponent<SpriteRenderer>(); // 54 spriteOb.sprite = sprites; // 55 break; 56 case 2: 57 Debug.Log("条件2"); 58 BASE_TEXTURE = "Textures/DTAC003"; 59 sprites = Resources.Load<Sprite>(BASE_TEXTURE); 60 target = GameObject.Find("Char"); 61 spriteOb = target.GetComponent<SpriteRenderer>(); 62 spriteOb.sprite = sprites; 63 break; 64 case 3: 65 Debug.Log("条件3"); 66 BASE_TEXTURE = "Textures/DTAC004"; 67 sprites = Resources.Load<Sprite>(BASE_TEXTURE); 68 target = GameObject.Find("Char"); 69 spriteOb = target.GetComponent<SpriteRenderer>(); 70 spriteOb.sprite = sprites; 71 break; 72 } 73 /* 74 本音はここでまとめて描画した方が、スクリプトもスッキリすると思うのですが 75 ここだと「BASE_TEXTURE」が未割り当てのローカル変数と判断されてしまいます。 76 sprites = Resources.Load<Sprite>(BASE_TEXTURE); 77 Debug.Log("sprites :" + sprites); 78 target = GameObject.Find("Char"); 79 spriteOb = target.GetComponent<SpriteRenderer>(); 80 spriteOb.sprite = sprites; 81 */ 82 83 reDraw = false;//描画処理終了 84 c_sel.ReDraw = reDraw; 85 86 } 87 } 88 89} 90
大雑把に
他のスクリプトでもどんどん使うなら public をつける(本当はもっと色々ありますが)
今回みたいにvoid Update()の中でなら、
普通に使えるという認識だったのですが違ったのでしょうか。
配列で、ファイル名を持ってくる、とか
バラバラの画像をまとめて一つにする、とか
考えないといけないですね。
がんばります!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/06 10:02