Пример #1
0
    void OnTriggerStay(Collider col)
    {
        //スイッチボムがなければ何もしない
        if (!col.GetComponent <SwitchBomb>())
        {
            return;
        }

        SwitchBomb sB = col.GetComponent <SwitchBomb>();

        //弾が装填状態なら何もしない
        if (sB.bulletNum >= sB.bulletNumMax)
        {
            return;
        }

        //弾を込める
        cable.GetComponent <Cable>().DestoryFlag();
        sB.bulletNum++;
        Destroy(gameObject);
    }
Пример #2
0
    // Update is called once per frame
    void Update()
    {
        if (Time.timeScale == 0)
        {
            return;
        }

        //ケーブルが伸び切るかオブジェクトに当たった時
        if (usbRange == MAX_SCALE && flag)
        {
            //フラグをfalseにする
            flag = false;
        }

        //ケーブルが縮み切った時
        if (!flag && usbRange == MIN_SCALE)
        {
            bool cFlag = false;
            //子オブジェクトにCableBlockがなければケーブルを消去する
            foreach (Transform child in cablePosition.transform)
            {
                if (child.gameObject.tag == "CableMoveBlock")
                {
                    cableFlag = true;
                    cFlag     = true;
                }
            }
            if (!cFlag)
            {
                DestoryCable();
            }
        }

        //USBが縮んでいるとき
        if (!flag)
        {
            bool downFlag = false;
            foreach (Transform child in cablePosition.transform)
            {
                //子オブジェクトのケーブルブロックを探す
                if (child.gameObject.name == "CableMoveBlock")
                {
                    foreach (Transform child2 in child.transform)
                    {
                        //子オブジェクトのケーブルグラウンドを探す
                        if (child2.gameObject.tag == "CableGround")
                        {
                            float range = 0.5f;
                            //下にブロックが行っても大丈夫な状態ならケーブルの角度を変更する
                            if (Physics.Raycast(child2.transform.position + new Vector3(0f, range, 0f) + (transform.forward * range), -Vector3.up, 0.5f, blockMask + LayerMask.GetMask("Enemy")))
                            {
                                downFlag = true;
                            }
                        }
                    }
                }
            }
            if (chilledBlock != null)
            {
                //USBコードを正面を向けるようにする
                targetAngleRotateY(transform.gameObject, cablePositionDefault.transform.eulerAngles, CABLE_ROTATE_SPEED);
                if (!downFlag)
                {
                    targetAngleRotateX(transform.gameObject, cablePositionDefault.transform.eulerAngles, CABLE_ROTATE_SPEED);
                }
            }
        }
        //USBハブも正面に向ける
        if (!cableLock)
        {
            targetAngleRotateY(cablePosition, transform.eulerAngles, USB_ROTATE_SPEED);
        }

        //ケーブルの長さ変更
        if (!cableFlag)
        {
            //USBケーブルの長さ変更
            usbRange += SPEED * Time.deltaTime * BoolToInt(flag);
            //最大値や最小値を超えないように
            usbRange = Mathf.Clamp(usbRange, MIN_SCALE, MAX_SCALE);
        }

        if (flag)
        {
            RaycastHit hit;
            //レイを飛ばしてCableBlockがあるなら
            if (Physics.Raycast(transform.position, transform.forward,
                                out hit, MAX_SCALE, cableMask))
            {
                GameObject hitOb = hit.collider.transform.parent.gameObject;

                foreach (Transform child in hitOb.transform)
                {
                    //子オブジェクトのケーブルブロックを探す
                    if (child.gameObject.tag == "CablePositon")
                    {
                        //角度の変更
                        transform.LookAt(child.transform.position);

                        //USBの角度の適応
                        cablePosition.transform.eulerAngles = transform.eulerAngles;
                        //ケーブルがUsbBoxに当たった時(通り過ぎた時)
                        if ((cablePosition.transform.position - (transform.position +
                                                                 transform.forward * usbRange)).magnitude >
                            (cablePosition.transform.position - child.transform.position).magnitude)
                        {
                            if (!AboutFloat(transform.eulerAngles.y, child.transform.eulerAngles.y, 90f))
                            {
                                DestoryFlag();
                                UsbRangeNormal();
                                break;
                            }

                            gameController.SeSoundLoad(AudioController.Se.Player_UsbSet);
                            //USBの角度変更
                            transform.eulerAngles = child.eulerAngles;
                            //場所変更
                            cablePosition.transform.position = child.transform.position;
                            //Usbを指すための角度変更
                            cablePosition.transform.eulerAngles = child.eulerAngles;

                            if (hitOb.tag == "CableMoveBlock")
                            {
                                cableMoveBlock       = hitOb.gameObject.GetComponent <CableMoveBlock>();
                                playerMove.cableFlag = false;
                                //子オブジェクトに設定
                                hitOb.transform.parent = cablePosition.transform;
                                flag = false;
                                //hitOb.GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeAll;
                                foreach (Transform child2 in hitOb.transform)
                                {
                                    child2.gameObject.layer = LayerMask.NameToLayer("Default");
                                }
                                hitOb.layer  = LayerMask.NameToLayer("Default");
                                chilledBlock = hitOb;
                                //リジッドボディの削除
                                Destroy(hitOb.GetComponent <Rigidbody>());
                            }
                            else if (hitOb.tag == "CableSwitchBlock" || hitOb.tag == "ReloadBlock")
                            {
                                buttonUi.SetActive(true);
                                childPort       = hitOb;
                                portBlockScript = childPort.GetComponent <PortBlock>();
                                ChildGimmickSearch(gimmickParent.transform, portBlockScript.portName);
                                cableFlag        = true;
                                cableLockPositon = cablePosition.transform.position;
                                cableLock        = true;
                                flag             = false;
                            }
                        }
                        else
                        {
                            //USBを伸ばす
                            UsbRangeNormal();
                        }
                    }
                }
            }
            else
            {
                UsbRangeNormal();
            }
        }
        else
        {
            UsbRangeNormal();
        }


        //ケーブルを持っているときの上移動
        if (chilledBlock != null)
        {
            foreach (Transform child in cablePosition.transform)
            {
                //子オブジェクトのケーブルブロックを探す
                if (child.gameObject.name == "PortBlock")
                {
                    BlockUpDown(child.gameObject);
                }
            }
        }

        //スイッチに当たっているとき
        if (cableLock)
        {
            //電源を入れる処理---------------------------------------
            if (xBox.ButtonDown(XBox.Str.A))
            {
                //電源の切り替え
                pawerFlag = !pawerFlag;
                //時間のリセット
                timer = 0f;
            }

            if (pawerFlag)
            {
                PortBlock pB = childPort.GetComponent <PortBlock>();

                //変更する処理
                if (TimerCount(pB.Timer, ref timer))
                {
                    ElectricCreate(childPort);

                    gameController.SeSoundLoad(AudioController.Se.Player_UsbPower);
                    if (childPort.name == "ReloadPort")
                    {
                        playerCharacter.GetComponent <PlayerMove>().Reload();
                    }

                    for (int i = 0; i < childGimmick.Count; i++)
                    {
                        if (childGimmick[i].GetComponent <SwitchFlag>() != null)
                        {
                            SwitchFlag sF = childGimmick[i].GetComponent <SwitchFlag>();
                            sF.flag = !sF.flag;
                        }

                        if (childGimmick[i].GetComponent <SwitchBomb>() != null)
                        {
                            SwitchBomb sB = childGimmick[i].GetComponent <SwitchBomb>();
                            //入っていればカウントを進め時間が来れば発射する
                            if (sB.bulletNum > 0)
                            {
                                sB.bulletNum--;
                                //生成
                                GameObject bulletOb = Instantiate(sB.bullet);

                                //場所と角度の設定
                                foreach (Transform child in childGimmick[i].transform)
                                {
                                    if (child.transform.name == "BulletPositon")
                                    {
                                        bulletOb.transform.position    = child.transform.position;
                                        bulletOb.transform.eulerAngles = child.transform.eulerAngles;
                                    }
                                }
                            }
                        }
                    }
                    pawerFlag = false;
                }
            }
            for (int i = 0; i < childGimmick.Count; i++)
            {
                //扇風機を回転させる処理-------------------------------------------------------
                if (childGimmick[i].name == "Wind")
                {
                    //場所と角度の設定
                    foreach (Transform child in childGimmick[i].transform)
                    {
                        //扇風機の羽の部分
                        if (child.transform.tag == "Wing")
                        {
                            Vector3 angle  = child.gameObject.transform.eulerAngles;
                            Vector2 rotate = new Vector2(Input.GetAxis((XBox.AxisStr.LeftButtonUp).ToString()), Input.GetAxis((XBox.AxisStr.LeftButtonRight).ToString())).normalized * 30f * Time.deltaTime;
                            angle += new Vector3(rotate.x, rotate.y, 0F);
                            if (angle.x > 0 && angle.x < 90)
                            {
                                angle.x = 0f;
                            }
                            if (angle.x < -90)
                            {
                                angle.x = -90f;
                            }
                            child.gameObject.transform.eulerAngles = angle;
                            //場所と角度の設定
                        }
                    }
                }
            }
            UsbRangeNormal();
            cablePosition.transform.position = cableLockPositon;
            //ケーブルの長さを算出し、限界の長さを超えていたら消去
            if ((cableLockPositon - transform.position).magnitude > MAX_SCALE)
            {
                DestoryFlag();
                usbRange = MAX_SCALE;
            }

            //大きく動いたらケーブルを離す
            if (Mathf.Abs(xBox.AxisGet(XBox.AxisStr.LeftJoyRight)) > 0.8f ||
                Mathf.Abs(xBox.AxisGet(XBox.AxisStr.LeftJoyUp)) > 0.8f)
            {
                DestoryFlag();
            }
        }

        //ケーブルの向きの更新
        transform.LookAt(cablePosition.transform.position);
        //ケーブルの長さの更新
        ScaleChange(Vector3.Distance(cablePosition.transform.position, transform.position));

        //ケーブルを手放す処理
        if (chilledBlock != null && usbRange == MIN_SCALE)
        {
            if (playerMove.isGround ||
                !cableMoveBlock.isGround)
            {
                blockTimer = 0f;
            }
            else
            {
                if (TimerCount(BLOCK_TIMER_MAX, ref blockTimer))
                {
                    DestoryFlag();
                    blockTimer = 0f;
                }
            }
        }
    }