もっとラクにできたのに

アプリケーションを開発する過程で、作った後になってから「もっとラクにできたのに」という点を書き記していく所 魅了屋という零細デベロッパーが書くよ https://www.miryoya.com


↑広告

UnityでC#Scriptから画像を表示させる

・これくらいは簡単に乗り越えられるだろとと思ってた

プログラミングに関しては見積もりが甘く、予想した時間を大幅に超過してしまう事がよくある。というか未だにである。お恥ずかしい。

今回もUnityの話題である。タイトルの通り、UnityでC#Scriptから表示させる画像を切り替えるというものである。どっかのパンチパーマの某絵書きのボブみたいに「ね、簡単でしょ?」と言わんばかりに、華麗なタイピングで乗り越えてやろうと思っていた。しかし、どうやっても、検索をしてトライしても上手くいかなかったのだ。クソが。

・長々ダラダラぐだぐだぐっちゃらぐっちゃら

仕組みとしては、格納してある配列のファイル名を基に、適切な画像を表示するというプログラムである。基本的には

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Linq;

public Sprite imageA;

void Start(){
 DisplayImage = GameObject.Find("DisplayImage").GetComponent<Image> ();
 DisplayImage.sprite = imageA;
}
 

でOKなのである。しかし、↓のソースコードを見て頂ければ分かるように、ファイル名をstring型で格納した為、「spriteはstring型じゃ指定出来ないじょーあばばばばー」(超訳と言われて上手くいかないのである。で、ぐっちゃらぐっちゃら何だかんだとやった結果、以下のように落ち着いた。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Linq;

public Sprite imageA,imageB,imageC; //本当はいっぱいある
string[,] Data = {{"imageA","Data1","Data2"},{"imageB","Data3","Data4"},{"imageC","Data5","Data6"}};
void Start(){
  DisplayImage = GameObject.Find("DisplayImage").GetComponent<Image> ();

  Sprite[] sprites = [imageA,imageB,imageC];
  Sprite SP = System.Array.Find<Sprite>( sprites, (sprite) => sprite.name.Equals(Data[0,0]));
  DisplayImage.sprite = SP;
}


お世話になった所 ありがとうございます
tsubakit1.hateblo.jp

本当はもっと入り組んでるし、やる事はもっとあって、山もたくさんあると思うけど、進むしかない。


オチを考えたけど思い浮かばなかった午後9時前

追記
ソースコードの間違いがあったので修正