//2つの座標値を与えて距離返す
    private float Kyori(UiPoint ff, UiPoint vv)
    {
        double kyori;
        float  x1x2 = ff.x - vv.x;
        float  z1z2 = ff.z - vv.z;

        decimal x1x2de = (decimal)MinusDeletef(x1x2);
        decimal z1z2de = (decimal)MinusDeletef(z1z2);

        double x1x2do = decimal.ToDouble(x1x2de);
        double z1z2do = decimal.ToDouble(z1z2de);

        kyori = Math.Sqrt((x1x2do) * (x1x2do) + (z1z2do) * (z1z2do));
        return((float)kyori);
    }
    void UIProcessing()
    {
        int itr = 0;

        while (itr < ikisakis.Count)
        {
            //ikisakis(リスト)をikisakiTに格納
            ikisakiT = ikisakis[itr];
            //Kakudoメソッド:座標間の角度を出す
            double kakudo = Kakudo(position, ikisakiT);
            //UIZahyouメソッド:initialpositionからkakudoの角度の直線状の位置を出す
            UiPoint ui = UIZahyou(kakudo, position);
            //UI座標から次の端点を検索するためのリストに追加
            sentakus.Add(new Sentaku(-ui.x, ui.z, ikisakiT.x, ikisakiT.z));
            //UI判定用のリストにUIの範囲を追加
            uiv.Add(new Vector3(-ui.x, 1.5f, ui.z));
            itr++;
        }
    }
    //手の座標とUIのリストから距離を計算し、rで指定した値より距離が小さい場合(手がUIに一定距離近づいたら)trueで
    //uinに、近づいたUIの座標値を格納する
    private bool CollisionDetection(Vector3 fingerposition, List <Vector3> uiv)
    {
        int i = 0;

        while (i < uiv.Count)
        {
            UiPoint ff = new UiPoint(fingerposition.x, fingerposition.z);
            UiPoint vv = new UiPoint(uiv[i].x, uiv[i].z);
            float   p  = Kyori(ff, vv);
            float   r  = 0.1f;
            if (p <= r)
            {
                uin = new Vector3(uiv[i].x, uiv[i].y, uiv[i].z);

                return(true);
            }
            i++;
        }
        return(false);
    }
    //座標と角度からdistanceで指定した距離分離れている場所の座標を返す
    private UiPoint UIZahyou(double kakudo, Tanten sentakumichi)
    {
        UiPoint ui;

        double x1 = sentakumichi.x;
        double z1 = sentakumichi.z;

        double distance = 0.3;
        double x1t      = Math.Cos(kakudo) * distance;
        double z1t      = Math.Sin(kakudo) * distance;

        float x1f = (float)x1t + (float)x1;
        float z1f = (float)z1t + (float)z1;

        ui = new UiPoint(x1f, z1f);



        return(ui);
    }
Esempio n. 5
0
    // Use this for initialization
    void Start()
    {
        genzaichi = new Tanten(-334, 325);

        //genzaichiのx座標を絶対値化する処理
        genzaichi = MinusDelete(genzaichi);

        //Ikisakiメソッド:genzaichiをroadsリストから検索
        //続き:繋がっている端点をikisakis(リスト)に格納
        ikisakis = Ikisaki(genzaichi, roads);

        //選択肢UIを表示
        //交差点から選択肢それぞれが距離:2の位置に表示
        int itr = 0;

        while (itr < ikisakis.Count)
        {
            //ikisakis(リスト)をikisakiTに格納
            ikisakiT = ikisakis[itr];

            //Kakudoメソッド:座標間の角度を出す
            double kakudo = Kakudo(genzaichi, ikisakiT);

            //UIZahyouメソッド:genzaichiからkakudoの角度の直線状の位置を出す
            UiPoint ui = UIZahyou(kakudo, genzaichi);

            //UI座標を検索するためのリストに追加
            sentakus.Add(new Sentaku(-ui.x, ui.z, ikisakiT.x, ikisakiT.z));


            //UI判定用のリストにUIの範囲を追加
            uiv.Add(new Vector3(-ui.x, 1.5f, ui.z));

            //////uiに格納されている座標(端点)に選択肢UIを表示
            Instantiate(uis, new Vector3(-ui.x, 1.5f, ui.z), Quaternion.identity);

            itr++;
        }
    }
Esempio n. 6
0
    // Update is called once per frame
    void Update()
    {
        //LeapMotionで選択
        //手の座標取得
        Vector3 fingerposition;

        fingerposition = hand_position;

        //判定処理
        bool uipointr = CollisionDetection(fingerposition, uiv);

        if (uipointr == true)
        {
            //sentakusリストからUI座標を検索して選択した端点を返す
            sentakumichi = SelectionSearch(uin, sentakus);
        }


        //sentakumichiのx座標を絶対値化する処理
        sentakumichi = MinusDelete(sentakumichi);

        //Ikisakiメソッド:sentakumichiをroadsリストから検索
        //続き:繋がっている端点をikisakis(リスト)に格納
        ikisakis = Ikisaki(sentakumichi, roads);

        //KousatenHantenメソッドから交差点or中点or行き止まりorエラーを判定
        k = KousatenHanten(ikisakis);

        //中点時の処理
        //未Debug
        while (k == 0)
        {
            int it = 0;
            while (it < ikisakis.Count)
            {
                if (genzaichi.x != ikisakis[it].x && genzaichi.z != ikisakis[it].z)
                {
                    sentakumichi = ikisakis[it];
                }

                it++;
            }
            ikisakis = Ikisaki(sentakumichi, roads);
            k        = KousatenHanten(ikisakis);
        }

        //MinusAddメソッド:sentakumichiのx座標にマイナスを付ける処理
        sentakumichi = MinusAdd(sentakumichi);

        //Debug.Log(sentakumichi.x + "," + sentakumichi.z);


        //ナビゲーションシステムで移動する処理(Unity)
        // NavMeshAgentを取得して
        var agent = GetComponent <NavMeshAgent>();
        //sentakumichi座標をgoal(行き先)に格納し、NavMeshAgentに目的地を取得させる
        Vector3 goal;

        goal = new Vector3(sentakumichi.x, 1.5f, sentakumichi.z);
        agent.destination = goal;

        GameObject[] uid = GameObject.FindGameObjectsWithTag("target");
        foreach (GameObject obj in uid)
        {
            GameObject.Destroy(obj);
        }

        //現在地を取得してgenzaichiに格納(Unity)
        //IntCastメソッド:transform.positionをint型にキャストする
        Tanten tugimichi = IntCast(transform.position.x, transform.position.z);

        //genzaichiのx座標を絶対値化する処理
        tugimichi = MinusDelete(tugimichi);

        //Ikisakiメソッド:genzaichiをroadsリストから検索
        //続き:繋がっている端点をikisakis(リスト)に格納
        ikisakis = Ikisaki(tugimichi, roads);

        //選択肢UIを表示
        //交差点から選択肢それぞれが距離:2の位置に表示
        int itr = 0;

        sentakus.Clear();
        uiv.Clear();

        while (itr < ikisakis.Count)
        {
            //ikisakis(リスト)をikisakiTに格納
            ikisakiT = ikisakis[itr];

            //Kakudoメソッド:座標間の角度を出す
            double kakudo = Kakudo(tugimichi, ikisakiT);

            //UIZahyouメソッド:genzaichiからkakudoの角度の直線状の位置を出す
            UiPoint ui = UIZahyou(kakudo, tugimichi);

            //UI座標を検索するためのリストに追加
            sentakus.Add(new Sentaku(-ui.x, ui.z, ikisakiT.x, ikisakiT.z));

            //UI判定用のリストにUIの範囲を追加
            uiv.Add(new Vector3(-ui.x, 1.5f, ui.z));

            itr++;
        }

        UiSummoning(uiv);

        ikisakis.Clear();
    }
Esempio n. 7
0
    IEnumerator move()
    {
        if (isRunning)
        {
            yield break;
        }
        isRunning = true;

        //sentakumichiのx座標を絶対値化する処理
        sentakumichi = MinusDelete(sentakumichi);



        //Ikisakiメソッド:sentakumichiをroadsリストから検索
        //続き:繋がっている端点をikisakis(リスト)に格納
        ikisakis = Ikisaki(sentakumichi, roads);

        //KousatenHantenメソッドから交差点or中点or行き止まりorエラーを判定
        k = KousatenHanten(ikisakis);
        int vvv = 0;

        while (vvv < ikisakis.Count)
        {
            Debug.Log(ikisakis[vvv].x + "," + ikisakis[vvv].z + "," + vvv);
            vvv++;
        }

        //中点時の処理
        //未Debug
        while (k == 0)
        {
            int vc = 0;
            int it = 0;
            while (it < ikisakis.Count)
            {
                if (sentakumichi.x != ikisakis[it].x && sentakumichi.z != ikisakis[it].z && (imaichi.x != ikisakis[it].x && imaichi.z != ikisakis[it].z))
                {
                    sentakumichi = ikisakis[it];
                    break;
                }

                Debug.Log(imaichi.x + "," + imaichi.z);
                Debug.Log("選択" + sentakumichi.x + "," + sentakumichi.z);


                it++;
            }
            ikisakis = Ikisaki(sentakumichi, roads);
            k        = KousatenHanten(ikisakis);

            break;
        }

        imaichi = sentakumichi;

        //MinusAddメソッド:sentakumichiのx座標にマイナスを付ける処理
        sentakumichi = MinusAdd(sentakumichi);

        //Debug.Log(sentakumichi.x +"," + sentakumichi.z);

        //ナビゲーションシステムで移動する処理(Unity)
        // NavMeshAgentを取得して
        var agent = GetComponent <NavMeshAgent>();
        //sentakumichi座標をgoal(行き先)に格納し、NavMeshAgentに目的地を取得させる
        Vector3 goal;

        goal = new Vector3(sentakumichi.x, 1.5f, sentakumichi.z);
        agent.destination = goal;

        ikisakis.Clear();



        //genzaichiのx座標を絶対値化する処理
        tugimichi = MinusDelete(sentakumichi);



        //Ikisakiメソッド:genzaichiをroadsリストから検索
        //続き:繋がっている端点をikisakis(リスト)に格納
        ikisakis = Ikisaki(tugimichi, roads);

        //交差点から選択肢それぞれが距離:2の位置に表示
        int itr = 0;

        sentakus.Clear();
        uiv.Clear();

        while (itr < ikisakis.Count)
        {
            //ikisakis(リスト)をikisakiTに格納
            ikisakiT = ikisakis[itr];

            //Kakudoメソッド:座標間の角度を出す
            double kakudo = Kakudo(tugimichi, ikisakiT);

            //UIZahyouメソッド:genzaichiからkakudoの角度の直線状の位置を出す
            UiPoint ui = UIZahyou(kakudo, tugimichi);

            //UI座標を検索するためのリストに追加
            sentakus.Add(new Sentaku(-ui.x, ui.z, ikisakiT.x, ikisakiT.z));

            //UI判定用のリストにUIの範囲を追加
            uiv.Add(new Vector3(-ui.x, 1.5f, ui.z));

            itr++;
        }

        UiSummoning(uiv);

        ikisakis.Clear();

        isRunning = false;

        yield return(null);
    }