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

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

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

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

Q&A

解決済

1回答

2957閲覧

指定した箇所への移動を、同じ速度で移動する方法を教えてください

YukiKuzira

総合スコア18

C#

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

0グッド

0クリップ

投稿2018/11/06 14:41

前提・実現したいこと

超Unity初心者でございます。
いろいろ参考書やネットで調べながら、簡単な2Dのアクションゲームを作ろうとしております。

そこで現在、同じ場所をぐるぐると巡回する障害物を設置しようと思い、移動地点を指定して、次々に移動させることには成功したのですが、横に移動するときと、縦に移動するときとで、移動速度に違いが出てしまいました。

こちら横でも縦でも同じ速度で、次の地点まで移動できるようにするには、どのようにコードを書けばよいのか。
ご教授いただけると幸いでございます。

何卒よろしくお願いいたしますm(_ _)m

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class MoveControll : MonoBehaviour { 6 7 float m_progress = 0f; // 進捗 [0, 1) 8 int m_ix = 0; // 現データインデックス 9 Vector2[] m_data = {new Vector2(0f, 0f), 10 new Vector2(-4f, 0f), 11 new Vector2(-4f, -2f), 12 new Vector2(0f, -2f), 13 new Vector2(0f, 0f)}; 14 15 // Use this for initialization 16 void Start () 17 { 18 transform.position = m_data[m_ix]; 19 } 20 21 // Update is called once per frame 22 void Update () 23 { 24 m_progress += 0.5f * Time.deltaTime; 25 if (m_progress >= 1.0f) 26 { 27 m_progress = 0f; 28 if (++m_ix >= m_data.Length - 1) 29 m_ix = 0; 30 } 31 transform.position = Vector2.Lerp(m_data[m_ix], m_data[m_ix + 1], m_progress); 32 } 33} 34

試したこと

Vector2.MoveTowardsを使うのかなと思ったのですが、等速にはなったものの、途中で次の地点にいきなりワープしたり、エラーを吐いたりして、結局正しい書き方がわかりませんでした(´;ω;`)

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

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

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

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

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

guest

回答1

0

ベストアンサー

確認用に、スピードを上げてます。詳細はコードのコメントを参照してください。

c#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using UnityEngine; 6 7public class MoveControll : MonoBehaviour 8{ 9 10 float m_progress = 0f; // 進捗 [0, 1) 11 int m_ix = 0; // 現データインデックス 12 Vector2[] m_data = { 13 new Vector2(0f, 0f), 14 new Vector2(-4f, 0f), 15 new Vector2(-4f, -2f), 16 new Vector2(0f, -2f), 17 //new Vector2(0f, 0f) // いらない 18 }; 19 20 // Use this for initialization 21 void Start() 22 { 23 transform.position = m_data[m_ix]; 24 } 25 26 // Update is called once per frame 27 void Update() 28 { 29 // インデックスを算出します 30 var nextIndex = (m_ix + 1 < m_data.Length) ? (m_ix + 1) : 0; 31 32 // 進む距離(スピード×進む時間) ※確認用にスピードアップさせてます 33 var detDistance = (5f * Time.deltaTime); //(0.5f * Time.deltaTime); 34 // 進む割合(進む距離/ポイント間の距離) 35 var detRatio = detDistance / Vector2.Distance(m_data[m_ix], m_data[nextIndex]); 36 // 進捗を足しこむ 37 m_progress += detRatio; 38 39 // 割合のリセット・インデックスの更新 40 if (m_progress >= 1.0f) 41 { 42 m_progress = 0f; 43 m_ix = nextIndex; 44 nextIndex = (m_ix + 1 < m_data.Length) ? (m_ix + 1) : 0; 45 } 46 47 // 進む 48 transform.position = Vector2.Lerp(m_data[m_ix], m_data[nextIndex], m_progress); 49 } 50}

投稿2018/11/06 15:50

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

YukiKuzira

2018/11/07 13:18

素晴らしいです!イメージ通りに動きました! 今回教えていただいたことは、今後にも活かします! 本当にありがとうございました(○≧▽≦○)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問