質問: 0; i < d62.lastresult; i++) { if(Input.GetKeyUp (KeyCode.W) ) { this.transform.position += new Vector3 (0, 0, 1); jj=true; }else if(Input.GetKeyUp (KeyCode.S)){ this.transform.position += new Vector3 (0, 0, -1); jj=true; }else if(Input.GetKeyUp (KeyCode.A)){ this.transform.position += new Vector3 (-1, 0, 0); jj=true; }else if(Input.GetKeyUp (KeyCode.D)){ this.transform.position += new Vector3 (1, 0, 0); jj=true; } } } } ```
回答: ``` public void MoveMain(){ Dice2 d62 = dice2.GetComponent (); if (d62.lastresult != 0 && jj == false) { for (int i = 0; i < d62.lastresult; i++) { if(Input.GetKeyUp (KeyCode.W) ) { this.transform.position += new Vector3 (0, 0, 1); jj=true; }else if(Input.GetKeyUp (KeyCode.S)){ this.transform.position += new Vector3 (0, 0, -1); jj=true; }else if(Input.GetKeyUp (KeyCode.A)){ this.transform.position += new Vector3 (-1, 0, 0); jj=true; }else if(Input.GetKeyUp (KeyCode.D)){ this.transform.position += new Vector3 (1, 0, 0); jj=true; } } } } ``` 上記だと、そもそも同一フレーム内にすべて処理してしまいます。 そのため、フレーム別で管理してあげる必要があります。 > > 1フレーム目:入力 > > 2フレーム目:(入力を検知している場合)移動 > > 3フレーム目:(入力を検知している場合)移動 > > ・ > > ・ > > ・ > > > ですので事象ごとにフラグで管理してコントロールしてやれば、 質問者さんがしたいことは実現できるかと思います。 **追記** 上記のコードですが、 > > if (d62.lastresult != 0 && jj == false) { > > > ここでは、ダイスの結果が0以外、jj?が偽である場合の分岐です。 > > if(Input.GetKeyUp (KeyCode.W) ) { > > else if(Input.GetKeyUp (KeyCode.S)){ > > else if(Input.GetKeyUp (KeyCode.A)){ > > else if(Input.GetKeyUp (KeyCode.D)){ > > > これいずれかが真だと、同一フレーム内では常に真の結果が返ります。 > > jj=true; > > > これが本来ストッパーの役割を果たすものだと思いますが、果たせていません。 一度箇条書きでいいので、実現したいことを時系列を並べて設計をしてみてください。 必要であればさらに追記します。