

アクションの様にフレーム毎に動くことを前提としたゲームならUpdateに移動処理の関数を入れ、その関数にフレームの更新間隔でループさせれば良いと思うのですが、RPGのキャラ移動のように例えばキー入力がされるまで処理を止めることが上手く出来ません。  
ソースはこのような感じです。

[code]

    01: void Start () {
    02:StartCoroutine (CoroutineSample());
    03:}
    04:
    05:void Update () {
    06:}
    07: IEnumerator CoroutineSample(){
    08:   WaitWhile (!Input.anyKeyDown){ yield return 0; }//キー入力まで処理を止める
    09:
    10: if(Wのキーを押したとき、キャラが上に移動する処理）
    11: 複数のelse if(他のキーを押したとき、Aなら左、Sなら下、Dなら右に移動する処理）
    12:
    13:　}//CoroutineSample()を閉じる括弧
    
[/code]

ところがこれでビルドすると、

> `WaitWhile (!Input.anyKeyDown){ yield return 0; }`に(；が必要です)。

とエラー文が出てビルドが成功しません。

どこを変えればビルドが成功するのでしょうか？

ご教授していただければ幸いです。


CC BY-SA 3.0
2016-12-09T10:04:27.867
31051
2017-01-24T02:49:57.560
2016-12-09T11:22:29.537
15185
19866
question
c# unity3d
Unity でオブジェクトの移動をキー入力で行おうとしているのですが、キー入力まで処理を止める方法尾を教えてください。


WaitWhile()の使い方が間違っているように思います。  
おそらく下記のように書くと意図通りになるのではないでしょうか。

[code]

    yield return new WaitWhile(() => !Input.anyKeyDown);
    
[/code]

WaitWhile()の詳細はUnityのスクリプトリファレンスをご覧ください。

Unity - スクリプトリファレンス: WaitWhile  
<https://docs.unity3d.com/ja/current/ScriptReference/WaitWhile.html>


CC BY-SA 3.0
2016-12-13T14:01:28.870
31123
2016-12-13T14:01:28.870
3783
31051
answer