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); }
// 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; } } } }