Unityで、ポケモンのようなグリッドベースで移動するスクリプトを作成しているのですが、行き詰まってしまったので今回投稿させていただきました。
ポケモンのゲームのような移動を実現したいため、1マス移動すると止まる・・・というものではなく、方向キーを入力している間は滑らかに動くことを目標としています。
以下のコードでは、キーを入力していない時に、Mathf.Lerpでpositionを整数にしているのですが、整数にしている間に他のキーを入力すると、他のキーの入力を優先してしまい、整数にしている作業は終わってしまいます。
positionを整数にする作業が、他のキーが入力されても妨害されなければ完成だと思うのですが、考えてみましたがわかりませんでした。
以下のコードでは修正するのが難しい場合は、丸々別のコードを教えていただきたいです。
見辛いコードだと思いますが、ご教授宜しくお願いします。
C#
1using System.Collections; 2public class A : MonoBehaviour { 3 int button=0; //1=下 2=左 3=右 4=上 4 public int speed=6; 5 public int helpSpeed=10; // 整数のpositionにするために動かすスピード 6 //bool down =false; 7 public bool helpMoveFlag = false; // 整数のpositionに移動中はtrue 8 void Start () { 9 } 10 void Update () { 11 if (Input.GetKey (KeyCode.DownArrow) || Input.GetKey (KeyCode.UpArrow) 12 || Input.GetKey (KeyCode.RightArrow) || Input.GetKey (KeyCode.LeftArrow)) { 13 if (Input.GetKey (KeyCode.LeftArrow)) { 14 transform.position += new Vector3 (-speed * Time.deltaTime, 0.0f, 0.0f); 15 button = 2; 16 } else if (Input.GetKey (KeyCode.RightArrow)) { 17 transform.position += new Vector3 (speed * Time.deltaTime, 0.0f, 0.0f); 18 button = 3; 19 } else if (Input.GetKey (KeyCode.UpArrow)) { 20 transform.position += new Vector3 (0.0f, speed * Time.deltaTime, 0.0f); 21 button = 4; 22 } else if (Input.GetKey (KeyCode.DownArrow)) { 23 transform.position += new Vector3 (0.0f, -speed * Time.deltaTime, 0.0f); 24 button = 1; 25 } 26 }else { 27 28 if (button == 1) { 29 transform.position = new Vector3 (transform.position.x,Mathf.Lerp(transform.position.y,Mathf.FloorToInt(transform.position.y),helpSpeed*Time.deltaTime), 0.0f); 30 } else if (button == 2) { 31 transform.position = new Vector3 ( Mathf.Lerp(transform.position.x,Mathf.FloorToInt(transform.position.x),helpSpeed*Time.deltaTime),transform.position.y, 0.0f); 32 } else if (button == 3) { 33 transform.position = new Vector3 ( Mathf.Lerp(transform.position.x,Mathf.CeilToInt(transform.position.x),helpSpeed*Time.deltaTime),transform.position.y ,0.0f); 34 } else if (button == 4) { 35 transform.position = new Vector3 (transform.position.x, Mathf.Lerp (transform.position.y, Mathf.CeilToInt (transform.position.y), helpSpeed * Time.deltaTime), 0.0f); 36 } 37 } 38 } 39}