Unityで演出とかずっと動き続けているものとかそういうのを作る時には
Sceneビューで確認、編集ができるAnimationを使う人がほとんどかもしれません。
ただ人によってはAnimationが使いにくい!
演出はソースで組みたい!って人もいます。
私もそうです。
Sceneビューで確認、編集ができるAnimationを使う人がほとんどかもしれません。
ただ人によってはAnimationが使いにくい!
演出はソースで組みたい!って人もいます。
私もそうです。
コルーチンは基本的に一方向的な処理を行わせるのが得意で
私はよく敵の行動パターンや制御をする必要のない演出に使ったりします。
ただ、大規模ゲームになってくると正直それよりも必要な部分に使う必要が出てきます。
特に非同期にシーンを読んだりAsync系のロードを行う時には
内部の方でコルーチンが回っていたりします。
このAsyncなどを使う場合で注意すべきなのは読んだら非同期で動くということなんです。
動くということはその分瞬間的なメモリが使用されるということです。
つまり同時にAsyncを20件でも読もうものならそれはもうひどいことに。
そんなことないだろと思う人もいるでしょうが、絶対にそれがないとは言い切れないんです。
ではどうするか?
そのための内容が今回になります。
そもそもAsync系の命令が同時に呼ばれるという恐れ。
それはUnityがCloneのObjectを作れるという結果です。
Async命令が入ったCompornentをもったObjectを同時に100体……
それが起きないとは言い切れない。
じゃあ、起きた場合にどうするのかということを考えると答えは簡単です。
コルーチンを行うための処理を同時に呼ばせなければいい。
でもコルーチンを使うという命令は同時に呼びたい。
ならObjectでStartCoroutineをしようせず管理するクラスに
コルーチンを使うことを命令すればいいんです。
public class LoadingCoroutineManager : MonoBehaviour
{
/*
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
static void RuntimeInitialization()
{
var obj = new GameObject("CoroutineManager");
obj.AddComponent
}*/
public static LoadingCoroutineManager instance;
public static LoadingCoroutineManager Instance
{
get { return instance; }
}
static Queue
static bool queueStack = false;
#region UNITY_MAIN
void Awake()
{
if (instance != null && instance.GetInstanceID() != this.GetInstanceID())
{
Destroy(this.gameObject);
return;
}
instance = this;
}
#endregion // UNIYT_MAIN:
public void AddCoroutine(IEnumerator coroutine)
{
queueCoroutine.Enqueue(coroutine);
if (!queueStack)
{
queueStack = true;
StartCoroutine("QueueStackLoad");
}
}
IEnumerator QueueStackLoad()
{
while (0 < queueCoroutine.Count)
{
yield return StartCoroutine(queueCoroutine.Dequeue());
}
queueStack = false;
}
}
ということでとても安価な方法で実装するとこんな感じです。
今回はIEnumeratorをシングルトンクラスのキューに保存し
そのキューがコルーチンを管理、呼び出しを行います。
これの最大の特徴はコルーチンなのに、呼び出しが終了したという判定が確認できるわけです。
これではまだちゃんとしたものはできそうにないですが、これを応用すると
「このクラスに同時に命令すれば終了の判定が取れ、なおかつその間はそれを示す演出が作れる」ということです。
クラス名からわかる通りローディングとかですかね。
IEnumeratorじゃなかったとしても非同期の命令を管理するための
シングルトンクラスというのは有用な部分もあります。
もちろんこういう命令はあまり使用されないことに越したことはないですが、
なんかコルーチンを使うと思いなと感じた時にはこの手を考えてみるのもありだと思います。
PR
COMMENT
カレンダー
最新記事
(02/05)
(01/22)
(06/01)
(12/18)
(12/18)
最新コメント
プロフィール
HN:
あい。
年齢:
30
性別:
非公開
誕生日:
1994/01/09
自己紹介:
仕事でunityしつつ、3Dとかやるので
そろそろどこに向かってるのか分からなくなってきた人
めーるあどれす:
nokutan_aiあっとyahoo.co.jp
このブログはリンクフリーです。
バナーのURL
"https://blog.cnobi.jp/v1/blog/user/ffb3f4a3a70931da92ac361f9c87596b/1408110435"
になってると思います。
@AI_nohito からのツイート
そろそろどこに向かってるのか分からなくなってきた人
めーるあどれす:
nokutan_aiあっとyahoo.co.jp
このブログはリンクフリーです。
バナーのURL
"https://blog.cnobi.jp/v1/blog/user/ffb3f4a3a70931da92ac361f9c87596b/1408110435"
になってると思います。
@AI_nohito からのツイート
カウンター