ARアプリ 選択したオブジェクトを動かせるようにしたい!3

AR

前回の記事ではオブジェクトを選択した際にコントローラーパネルを表示してUIボタンにて操作することが出来るようになりました

しかし、動き方に難有りだったので今回はそこを改善していこうと思います



考察

矢印ボタンを押している間だけ進んで欲しかったのですが、1クリックにつき1行動といった感じでループはしてくれませんでした

そこでOn Click()について調べたところ、trueになるのはボタンを離した瞬間であり、押している間は何も実行されないことが分かりました

これが1クリック1行動の原因でした

もふもふ
もふもふ

詰んだもふ(; ・`д・´)

更に調べると、ボタンの機能の1つにEvent Triggerというものがあり、ボタンを押した時と離した時で別々の事を実行させることが可能なようなので、この機能を使って改善を試みようと思います

改善方法

まずはボタンの設定を変更します

ループさせたいボタンのInspectorウインドウでAdd Component→Eventを選択します

更にEvent Triggerを選択

Add New EventType→PointeDownを選択します

これはボタンが押された瞬間のフラグになります

ボタン用に新規スクリプトを作成し、空オブジェクトに入れておきます

以下はスクリプト内容になります

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class X1 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // ボタンを押したときtrue、離したときfalseになるフラグ
    private bool buttonDownFlag = false;
    private void Update()
    {
        if (buttonDownFlag)
        {
            FindObjectOfType<Move>().X1();
        }
    }
    // ボタンを押したときの処理
    public void OnButtonDown()
    {
        //Debug.Log("Down");
        buttonDownFlag = true;
    }
    // ボタンを離したときの処理
    public void OnButtonUp()
    {
        //Debug.Log("Up");
        buttonDownFlag = false;
    }
}

ボタンを押した時にtrue、離した時にfalseになります

こうする事でボタンを押している間はずっとtrue状態になるので、それを利用してアップデート内でMoveスクリプトから対応するメソッドを呼び出しています

その空オブジェクトを矢印のようにドラッグし、PointeDownトリガーに入れます

次に赤線部分をクリックします

空オブジェクトに入れたスクリプトの名前を選択出来るので、OnButtonDown()を続けて選択します

続けてAdd New EventTypeをクリックします

同様の流れでPointerUPも設定します

これはボタンを離した瞬間のフラグになります

ここまでが1つのボタンに対する設定になるので、同様の事をループさせたいボタン全てに施します

スクリプトもボタンごとに内容が変わるのでその都度作成します

もふもふ
もふもふ

めんど(;゚Д゚)

実行

ばっちり思い通りの動作をしてくれました!

より直感的な操作が出来るようにジョイスティックも追加してます

現在選択されているオブジェクトを明確にするため、選択中は色が変わるようにしました



まとめ

・UIボタンのEvent Triggerを用いることでOn Click()では成しえなかった動作を実現することが可能

この機能のおかげで任意のオブジェクトを任意の場所に並べるところまで実現出来ました

引き続き改善や機能の追加を試みようと思います

タイトルとURLをコピーしました