働くヒキニート

ヒキニートが社会復帰をするために働いたり資格の勉強をする日々を載せるブログ

ヒキニート、熱を出す。

 おはようございます、こんにちは、こんばんは、はじめまして、ヒキニートのふみです。

 皆さん酷暑の中如何お過ごしでしょうか、私は夏が一番嫌いな季節なので、早く終わらないかと思う日々でございます。

 

 さて、前回から12日経過することになってしまったわけですが、結論からいうと体調をブロック崩ししてしまい、休日はあったのですが、部屋で死んでおりました、、、。

 

 体調管理には気を使っていた?のにやはり人と接する回数が多いと風邪関数の試行回数が増えて確率が低くてもエンカウントしてしまうものですね。

 

 

 さて、今日ももくもくと unity をやっていたわけですが、ふとタイマー処理をしようと思いコルーチンなるものを使用しようとしたわけですが、

 

 いかんせんこの類の機構は頭でフローを追うときに自分が管理していない領域のことも知っていないと考えるのが難しいような気がします。

 

 特にいろんな初心者御用達の攻略本の第X関門くらいに出没するボス戦のような位置にぬりかべよろしく立ちはだかっています、、、。

 

 

 そこで、まだ鼻水を垂らしている自称7年プログラマーができるだけ詳しくわかりやすくなるように説明したいと思った所存でございまする、、、

 

あっち←こっち→_

 まずコルーチンなるものを理解するにはマルチスレッドをシングルスレッドで考えると楽になると思います。

 

 unityなどのゲームエンジンhogeライブラリ、などのプログラミングを補助する形でのゲームエンジンでは、
たいていの場合、本来一から書く場合にユーザーが書かなくてはいけない処理を変わりにどっかでやってくれています。

f:id:humibassclef:20180824152248p:plain

 

 最近はマルチコアなどで物理的に同時にやってくれていたりしますが、わかりやすくシングルコアなどのCPUに例えて処理の流れを考えると、

 

どこかでその かわりにやってくれていることゲームエンジンにさせてあげるためにゲームを交代させてあげなければなりません、、、。

 

 

そのため、大抵の場合は一方的に、


「ここでは初期化処理をします。」


「ここにメイン処理を書いてください。」


「ここには終了処理です。」


という風にイベント関数をライブラリなどから書く場所を固定で用意されていると思います。

 

 しかしユーザーがそのイベント関数とは別にマルチスレッドで処理を書きたいとすると、

 

かわりにやってくれていること をさせてくれるのがいつになるのかわからないので、ゲームエンジン君がしびれを切らして性格が崩壊していきます、、、。

 

f:id:humibassclef:20180824153508p:plain

 

そのため、unity などでは コルーチン などの機能を用意して、
擬似的にマルチスレッドを表しています。

 

あくまで擬似的なので、どこかでシングルスレッドへの変換のような機構を作ることになるのですが、
それが unity での yield になるわけです。

 

下記はコルーチンの一例になります。


void Start() {
    StartCoroutine(loopFunction());  // テトリスを貸してもらう約束をする
}

IEnumerator loopFunction() {
    // テトリスを貸してもらう
    
    yield return new WaitForSeconds(1f);    // ちょっとテトリスをやってもらう
 
    // また貸してもらう
    
    // 約束の終了
}


 

 

 下記はコルーチンが無限ループになる例です

 (※本来マルチスレッドを作る場合終わりがある処理を書くべきです)

 借りパクで怒られてしまうこともあります、、、。

 


void Start() {
    StartCoroutine(loopFunction()); // テトリスを貸してもらう約束をする
}

IEnumerator loopFunction() {
    // テトリスを貸してもらう

    // 何回も貸してもらう
    while(true) {
        yield return new WaitForSeconds(1f);    // ちょっとテトリスをやってもらう
 
        // また貸してもらう
    }
    
    // 約束の終了
}

 

 どうでしょうか、コルーチン、マルチスレッド、友人とのゲーム交代の大切さが少しわかったでしょうか?

 

 この記事になんの因果かたどり着いて理解を深めてもらえると、私も嬉しいと思います。

 (逆にわからなかったらわからない点をコメントとかで書いてくれると私が頑張ったり、自称スーパーハカーが対応してくれるかもです。)

 

 1000文字を軽く超えていることですし、今日はここらへんで乙りたいと思います。

 

 ではノシ