泥にまみれろよ -素人アプリ開発者のBlog-

プログラミング歴1年のビギナーが、趣味のiOSアプリ開発について綴るブログです。VBAによる事務作業効率化、筋トレ、ファッション等の情報についても発信します。

Vector3.MoveTowardsを連続して使用するときにハマったこと【Unity】

antique-appです。

ようやっとUnityで次のアプリを作り始めたのですが、基本的なことでつまずき、丸1日ほどかかって解決しました。(注:超初歩的な内容です!)

 

やりたかったこと

オブジェクトをシャッフルする動きを作りたかったんです。

横一列に並んだオブジェクトが3つくらいあって、各々の移動先がランダムに決まって(2つしか移動しない場合もあり)、かつ移動先が重複しない、みたいな。

完成形としては、こんな感じです。

 

つまずいたこと

調べたところ、オブジェクトを一定速度で移動させるときにはVector3.MoveTowardsという関数を使えばいいことがわかったので、Update( )内のVector3.MoveTowardsに現在地・目的地・移動速度を入れて使ってみたところ、「1回目の移動は」バッチリできました。

 

docs.unity3d.com

 

がっ、問題はその次の移動です。

続けて2回目の移動のスクリプトをUpdate( )内に書いてみたところ、オブジェクトがガクガクするだけで目的地まで動かない!

(レモンがガクガクする様はシュールでした)

 

原因と解決方法

それでしばらく悩んでいたのですが、1回目の移動をUpdate( )内に書いているため、1回目の移動が終わってないうちから2回目の移動が始まってることに気がつきました。

というわけで、以下のように1回目の移動が終わってから2回目の移動が始まるようにしてあげてなんやかんやすると、シャッフルの動きをつくることができました。

 

        //1回目の移動
        if (moving == 0)
        {

            //Vector3.MoveTowardsを使用して移動するメソッド
            Lemon1moving();
       //現在地が目的地と一致したら次の移動へ
            if (lemon1.transform.position == lemon1target)
            {
                moving = 1;
            }
        }
        
        //2回目の移動
        if (moving == 1)
        {
            Lemon1moving();
        }

 

Update( )がなんたるかを理解していない、私のような初心者にはありがちなミスですね!

とりあえずシャッフルの動きはできるようになりましたが、まだまだやることはたくさんあるので、6月中のリリース目指してマッタリやっていきます〜〜

 

それでは。