万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    yieldの不可解な現象 UnityScript

    別クラスのメソッドを使う時と、自分のクラス内のメソッドを使う時でyieldの挙動がへん。

    Hogeクラスの中のHogeMethodメソッドを呼ぶときは呼ばれるのに、外部のExternalHogeクラスのHogeMethodメソッドが呼ばれない
    Hogeクラス内

        class Hoge extends MonoBehaviour
        {
            public function HogeMethod()
            {
                Debug.Log("--1");
         
                var www : WWW = new WWW("http://google.com");
                yield www;
            }
         
            function Start()
            {
                yield HogeMethod();
         
                var externalHoge:ExternalHoge = new ExternalHoge();
         
                yield externalHoge.HogeMethod();
                Debug.Log("--3");
                // do something
            }
        }
    

    ExternalHogeクラス内

        class ExternalHoge
        {
            public function HogeMethod()
            {
                Debug.Log("--external hoge");
         
                var www : WWW = new WWW("http://google.com");
                yield www;
                Debug.Log("--2end");
            }
        }
    

    「yield externalHoge.HogeMethod();」から
    下のように呼び出しを書き換えるといけた。

    StartCoroutine(externalHoge.HogeMethod());
    

    しかしながら、

    --1
    --3
    --2end

    のように順番にならない・・。

    だからといってExternalHogeクラスのHogeMethod()メソッドのWWWのyieldをあきらめるのもだめだ。nullが返るので。
    さらに
    yield Coroutine(externalHoge.HogeMethod());にする