konnyakuken / Book_Labyrinth

1 stars 0 forks source link

Moveマスかつ分岐マスに止まった時の処理の解決方法 #2

Open fukuchang opened 3 years ago

fukuchang commented 3 years ago

Playerにだけ該当のマスに止まった時に非同期で分岐表示がうまくいかない時の対処法 Player.cs のメンバ変数でMassManager型の変数massManagerを宣言 private MassManager massmanager;

ただ、移行するにあたってマスに触れた時に、どのMassManagerのコンポーネントの値を取るのかを指定しないといけないので、OnCollisionEnter()の中で massManager = massManager = col.gameObject.GetComponent<MassManager>(); の処理を記述する。

また、該当マスの処理を表してるこの部分を新しく用意したBranchProcess()メソッドに移行 https://github.com/konnyakuken/Book_Labyrinth/blob/683c11e426e2688b22365b728707f9872388cd86/Assets/Scripts/PlayerScript.cs#L275-L296 https://github.com/konnyakuken/Book_Labyrinth/blob/683c11e426e2688b22365b728707f9872388cd86/Assets/Scripts/PlayerScript.cs#L397-L420

結果的に、BranchProcess()メソッドは以下のようになる。

 public void BranchProcess()
    {
        int count = 0;
        //分岐があるのか判定
        if (massManager.isLeft == true)
        {
            count++;
            branch_Left = true;
        }
        if (massManager.isRight == true)
        {
            count++;
            branch_Right = true;
        }
        if (massManager.isUp == true)
        {
            count++;
            branch_Up = true;
        }
        if (massManager.isDown == true)
        {
            count++;
            branch_Down = true;
        }

        if (mass_name == 3 && count > 1)//止まるマスがMoveかつ分岐があるとき  分岐ボタンが早く出るため対策move_mass == 1 &&
        {
            if (computer == false)
            {
                Debug.Log("何処へ行きますか?");
                //UnityEditor.EditorApplication.isPaused = true;
                re_moveflag = true;
                move_one = false;

                branch_on = true;
            }

            else if (computer == true)
            {
                move_one = false;
                if (start_branch == true)
                {
                    NPC_Branch();
                }
                else
                {
                    branch_on = true;
                }
            }
        }
    }

元々処理を書いてた以下の部分は消して、BranchProcess()に書き換える。 また、Playerだけ該当のマスに止まった時に必ず道を選択できる処理を入れたいので、 この条件分岐処理内の最後で、 https://github.com/konnyakuken/Book_Labyrinth/blob/683c11e426e2688b22365b728707f9872388cd86/Assets/Scripts/PlayerScript.cs#L175 以下の処理を入れる。

if (!computer)
{
     BranchProcess();
     Check();
}
konnyakuken commented 3 years ago

上記の方法で実装してみたところ、今度はNPCの分岐かつMoveで1マスワープしてから移動し(おそらく処理が終了する前に分岐が二回呼び出されたまま?)なのと、分岐かつMove以外のマスに丁度止まった後、次のターン開始時に移動するマスが1マス少ない問題が発生してしまっています。ご指導ご鞭撻のほど何卒宜しくお願い致します。

fukuchang commented 3 years ago

@konnyakuken 現状の最新のPushしてくれると嬉しい!

konnyakuken commented 3 years ago

@fukuchang pushしました。 β版まで時間がなかったのでとりあえず分岐かつMoveのマスを実装せずに進めていた為、その名残が残ってるかもしれないです。 remoで開発しています。