05 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 07

ハルシオンシステムの気ままBlog

株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

 

【Unity】コルーチン処理を別クラスにして共通処理にしたかった… 

こんにちは。
大坂です。

最近は随分寒い日が多かったですが、今日は多少あったかいみたいですね。
関東は明日から雨みたいですけど…orz

さて今週もちょっとしたネタを!
コルーチンっていつも自クラス内だけで使ってたんですけど、外のクラスのも呼べるんですね。
まぁそうですよね…
ちょっとサーバーからダウンロードした画像取得とかの処理を一か所にまとめたかったのでこんな感じにしてみましたが、
もっといい方法あったら教えてくださいまし!

共通クラスの処理
  Sprite file = null;

public IEnumerator CreateSprite(string fileName) {
// ダウンロードしたファイルが存在するかチェック
if(System.IO.File.Exists(Application.persistentDataPath + "/" + fileName)) {
string path;
//エディタだと取得パスが違うので振り分け
#if UNITY_EDITOR
path = "file:///" + Application.persistentDataPath + "/"
#else
path = "file://" + Application.persistentDataPath + "/";
#endif
WWW www = new WWW(path + fileName);
while(!www.isDone) {
yield return null;
}
Texture2D tex2D = www.textureNonReadable;
file = Sprite.Create(tex2D, new Rect(0, 0, tex2D.width, tex2D.height), Vector2.zero);
}
}

public Sprite GetSprite() {
return file;
}

ざっくりこんな感じ。
一応ダウンロードしたファイルが存在するかチェックしてから処理開始してます。

呼び出し側
  Image test;
FileController fileController

void Start() {
// 共通処理クラスの取得
fileController = …;
// ファイル取得処理の呼び出し
StartCoroutine(GetDownloadSprite({ファイル名}));
}

IEnumerator GetDownloadSprite(string fileName) {
// コルーチン処理が終わってから次の処理に行かせたい。
yield return StartCoroutine(fileController.CreateSprite(fileName));
test.sprite = fileController.GetSprite();
}

これで目的の処理は達成できましたとさ。

ではではまた来週ノシ
スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 0   

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://halcyonsystemblog.blog.fc2.com/tb.php/277-66874145
この記事にトラックバックする(FC2ブログユーザー)