Beispiel #1
0
    // Update is called once per frame
    void Update()
    {
        if (canMove == true)
        {
            if (script.GetNowFront() == (int)manager.Wall.Left ||
                script.GetNowFront() == (int)manager.Wall.Right)
            {
                gameObject.transform.Translate(Way, Space.World);
            }
            else
            {
                gameObject.transform.Translate(Way, Space.World);
            }
        }

        //   TManager.setStartMoveWay(Way);
    }
Beispiel #2
0
    //=========================
    // 更新処理
    //=========================
    void Update()
    {
        if (TouchStateManagerScript.GetTouch() == false && awa_Flag == true)
        {
            awa_Flag = false;
        }
        // タッチされている時
        if (managerScript.isRotate == false && TouchStateManagerScript.GetTouch())
        {
            Kuttuki_Flag = false;

            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if (!(Physics.Raycast(ray, out hit, Mathf.Infinity, mask)))
            {
                if (!awa_Flag)
                {
                    audioSource.PlayOneShot(SE_awa);
                    awa_Flag = true;
                }
            }
            if (startObj == null)
            {
                // Rayが特定レイヤの物体(バイキン)に衝突している場合
                if (Physics.Raycast(ray, out hit, Mathf.Infinity, mask))
                {
                    // 大バイキンにRayが衝突している時
                    if (hit.collider.gameObject.CompareTag("BigSlime") &&
                        isFusion == false)
                    {
                        Debug.Log("爆発");

                        touchFlg = true; Debug.Log("有効なタッチである");

                        // 処理内容はslimeControl.csのBigSlimeClickAct()の中
                        hit.collider.gameObject.GetComponent <slimeControl>().SlimeDestroy(new Vector3(0, 0, 0));
                        managerScript.CheckBubble();
                    }
                    // 小、中バイキンにRayがぶつかった時
                    else if (hit.collider.gameObject.CompareTag("MiddleSlimeTate") || hit.collider.gameObject.CompareTag("MiddleSlimeYoko") ||
                             hit.collider.gameObject.CompareTag("SmallSlime"))
                    {
                        isFusion    = true;
                        currentName = hit.collider.gameObject.tag;

                        // バイキンオブジェクトを格納
                        startObj = hit.collider.transform.parent.gameObject;
                        endObj   = hit.collider.transform.parent.gameObject;

                        // 削除対象オブジェクトリストの初期化
                        removableBaikinList = new List <GameObject>();

                        // 削除対象のオブジェクトを格納
                        PushToList(hit.collider.gameObject);

                        Debug.Log("削除対象追加");
                    }
                }
                else
                {
                }
            }
            //タッチ終了時
            else if (TouchStateManagerScript.GetTouchPhase() == TouchPhase.Ended)
            {
                int remove_cnt = removableBaikinList.Count;

                if (remove_cnt == 2)
                {
                    if (startObj.CompareTag("MiddleSlime"))
                    {
                        //CreateBigBubble();
                    }
                    //小バイキンが消された場合
                    else if (startObj.CompareTag("SmallSlime"))
                    {
                        //CreateMiddleBubble();
                    }

                    //GameObject.Destroy(startObj);
                    //GameObject.Destroy(endObj);

                    //startObj.GetComponent<slimeControl>().BubbleMove(Vector3.Normalize(startObj.transform.position - endObj.transform.position));
                }
                // 消す対象外の時
                else
                {
                    for (int i = 0; i < remove_cnt; i++)
                    {
                        removableBaikinList[i] = null;
                    }
                }

                // リスト内のバイキンを消す
                currentName = null;
                startObj    = null;
                endObj      = null;
            }
            // タッチ中
            else if (TouchStateManagerScript.GetTouchPhase() == TouchPhase.Moved && startObj != null)
            {
                // Rayが特定レイヤの物体(バイキン)に衝突している場合
                if (Physics.Raycast(ray, out hit, Mathf.Infinity, mask))
                {
                    if (hit.collider != null)
                    {
                        GameObject hitObj = hit.collider.transform.parent.gameObject;

                        // 同じタグのブロックをクリック&endObjとは別オブジェクトである時
                        if (hitObj.tag == currentName && endObj != hitObj)
                        {
                            Debug.Log("同タグの別オブジェクトが選択された");
                            // 2つのオブジェクトの距離を取得
                            float distance = Vector2.Distance(hitObj.transform.position, endObj.transform.position);
                            isFusion = false;
                            if (distance <= MaxDistance)
                            {
                                Debug.Log("z値を取得し比較");
                                // zが同じであれば

                                if (((managerScript.GetNowFront() == (int)manager.Wall.Front) || (managerScript.GetNowFront() == (int)manager.Wall.Back)) &&
                                    Mathf.Floor(Mathf.Abs(startObj.transform.parent.position.z)) / (MaxDistance / 2) ==
                                    Mathf.Floor(Mathf.Abs(hitObj.transform.parent.position.z)) / (MaxDistance / 2)
                                    )
                                {
                                    DecideBubble(hitObj);
                                }
                                else if (((managerScript.GetNowFront() == (int)manager.Wall.Right) || (managerScript.GetNowFront() == (int)manager.Wall.Left)) &&
                                         Mathf.Floor(Mathf.Abs(startObj.transform.parent.position.x)) / (MaxDistance / 2) ==
                                         Mathf.Floor(Mathf.Abs(hitObj.transform.parent.position.x)) / (MaxDistance / 2))
                                {
                                    DecideBubble(hitObj);
                                }
                            }
                        }
                    }
                }
            }
        }

        if (touchFlg == true)
        {
            //ここに中小のバイキン削除、バイキン生成を移す
            touchNum++;
            managerScript.CheckBubble();
            touchFlg = false;
        }
    }