質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

5621閲覧

Unity,C#を使用して、キャラクターをグリッドベースで移動するスクリプトを作成したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2016/08/10 18:36

編集2016/08/16 00:39

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2016/08/11 09:06

修正中にしたまま退会とか
guest

回答1

0

ターゲットの座標を整数値で移動させて、Vector3.Lerpで線形補完すれば良いと思います

投稿2018/12/24 02:21

bochan2

総合スコア2050

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問