// Update is called once per frame public void Update(ClimbingSystem system) { if (ClimberMethod.GetInputCatch() == false) { system.ChangeState(new AirState()); return; } /* * X = 手の長さ * 2 * 調整値, Y = X - 移動距離 * それぞれの状態に遷移する距離として近づける距離をXとして進める距離をYとして X > 移動距離 > Y * 進む方向の手を進める ・・・ 入力直後はこれからスタート または 距離がY以上で遷移 * 反対の手を近づける ・・・ 距離がX以上で遷移 または 入力が無いときに遷移 */ //canAdvanceStep = magnitudeHandToHand < handMovement; var inputMovement = ClimberMethod.GetInputMovement3D(); var inputMovementMagni = inputMovement.magnitude; DebugVisualizeVector3.visualize = inputMovement; // 掴んだ状態で移動できる範囲 system.callInOnDrawGizmos.Add(() => { //Gizmos.DrawWireSphere(system.nearGrippable.transform.position); }); if (ClimberMethod.GetInputJumpTrigger()) { float jumpPower = ClimberMethod.CalcJumpPower(1f, 1f, system.level.maxJumpPowerFactor, system.level.baseJumpPower); var jumpDir = ClimberMethod.CalcJumpDir(system.level.jumpingDirction, inputMovement, system.level.shotControlFactor, system.grippablePoint.GetWallDirection() * Vector3.forward); jumpDir = Vector3.up; //var farGripColi = ClimberMethod.CheckGripPoint(inputMovement, system.farGrippable, system.level.ableInputGrippingLimitCos); //if (farGripColi != null) //{ // var closePos = farGripColi.ClosestPoint(system.gripAncharBase.transform.position); // var dir = closePos - system.rigid.transform.position; // dir.y = 1f; // dir.Normalize(); // jumpDir = dir; //} //} //jumpDir = ClimberMethod.Jump(jumpDir, system.rigid, ref system.grippablePoint, jumpPower); //system.UnenableCollider(0.2f); system.audio.PlayOneShot(system.audioClip[0]); system.ChangeState(new AirState()); return; } Vector3 moveVec = Vector3.zero; //GameObject forwardHand = null; // 移動方向を求める if (inputMovementMagni > Mathf.Epsilon) { var edge = system.grippablePoint.GetEdgeFromDirection(inputMovement); moveVec = system.grippablePoint.CalcMoveDirction(inputMovement); } bool canMoving = Vector3.Dot(moveVec, inputMovement) > system.level.ableInputMovementLimitCos; if (canMoving == false) { return; } var movement = ClimberMethod.CalcLerpTranslation( moveVec.normalized, 1f, system.level.handMovementSpdFactor); movement = system.grippablePoint.ClampHandsMovement(system.gripAncharBase.transform.position, movement); //if (movement.sqrMagnitude <= 0) //{ var nearGripColi = ClimberMethod.CheckGripPoint(inputMovement, system.nearGrippable, system.level.ableInputGrippingLimitCos); if (nearGripColi != null) { var closePos = nearGripColi.ClosestPoint(system.gripAncharBase.transform.position); if ((closePos - system.gripAncharBase.transform.position).sqrMagnitude <= 0.04f) { system.grippingCollider = ClimberMethod.ChangeGrippablePoint(ref system.grippablePoint, nearGripColi); //system.handMovementMode = HandMovementMode.Catch; //system.isChange = true; } } //} system.gripAncharBase.transform.Translate(movement); //switch (system.handMovementMode) //{ // //case HandMovementMode.Catch: // // float step = system.grippablePoint.SetHandPosition(forwardHand, system.grippingCollider, 0.5f); // // bool isFinished = 0.000001f > step; // // if (isFinished) // // { // // system.grippablePoint.SetHandPosition(forwardHand, system.grippingCollider); // // //system.handMovementMode = HandMovementMode.Advance; // // system.isChange = false; // // } // // break; // //case HandMovementMode.Advance: // // AdvaneHand(inputMovement, system); // // break; // //case HandMovementMode.Close: // // CloseHand(inputMovement, system); // // break; // //default: // // // 通らないはず // // Debug.Log("HandMovementMode == None"); // // break; //} }
public void FixedUpdate(ClimbingSystem system) { if (jumpHoge >= 0f && jumpHoge <= 1.0f) { if (Input.GetKey("joystick button 0")) { jumpHoge += Time.deltaTime; system.rigid.AddForce(Vector3.up * 5, ForceMode.Impulse); } else { jumpHoge = -1.0f; } } // 空中移動 var inputMovement = ClimberMethod.GetInputMovement3D(); inputMovement.z = 0f; ClimberMethod.Swap(ref inputMovement.y, ref inputMovement.z); if (inputMovement.sqrMagnitude > Mathf.Epsilon) { system.rigid.AddForce(inputMovement * system.level.airControlVelocity, ForceMode.VelocityChange); } //{ // //! デバッグ用 舞空術 // if (Input.GetKey(KeyCode.LeftShift) && Input.GetKey(KeyCode.Space)) // { // system.rigid.AddForce(Vector3.up * 0.8f, ForceMode.VelocityChange); // } //} var nearGripColi = ClimberMethod.CheckGripPoint( system.rigid.velocity.normalized, system.nearGrippable, system.level.ableInputGrippingLimitCos); if (nearGripColi != null) { var temp = nearGripColi.gameObject.GetComponent <GrippablePoint2>(); } if (ClimberMethod.GetInputCatch() == false) { system.canCatch = true; return; } if (system.canCatch == false) { return; } if (nearGripColi != null) { system.audio.PlayOneShot(system.audioClip[1]); //system.grippablePoint = system.nearGrippable.GetComponent<GrippablePoint2>(); system.grippingCollider = ClimberMethod.ChangeGrippablePoint(ref system.grippablePoint, nearGripColi); var ancharRigid = system.gripAncharBase.GetComponent <Rigidbody>(); Quaternion rotation = Quaternion.FromToRotation(Vector3.forward, nearGripColi.GetComponent <GrippablePoint2>().GetEdgeDirection()); ClimberMethod.SetGrippingAnchar(ancharRigid, nearGripColi.ClosestPoint(system.rigid.position), rotation); system.ChangeState(new GrippingWallState()); } else { system.gripAncharBase.transform.GetComponent <Rigidbody>().position = Vector3.Lerp(system.gripAncharBase.transform.GetComponent <Rigidbody>().position, system.rigid.position, 0.5f); } }