void DoWallRun(Vector3 norVector, IRunnableWall runWall, bool isReset) { Vector3 stickVector; if (CheckWallRunRequirement() && !isReset) { if (rb.useGravity == true) { rb.useGravity = runWall.DisableGravity(); isWallRun = true; } stickVector = -norVector * (wallRunForce / wallRunStickForceDivider) * Time.deltaTime; ApplyExternalForce(stickVector); //pnSign = signAngle / Mathf.Abs(signAngle); //Debug.Log("Stick Vector : " + stickVector); //lookAroundObject.wallRunCamera(povNegSign); wallCinemachine.wallRunCamera(CheckWallSide()); } else if (isReset) { rb.useGravity = runWall.EnableGravity(); //lookAroundObject.wallRunCameraReset(pnSign); wallCinemachine.wallRunCameraReset(); isWallRun = false; isResetWallRun = false; } else//This is required { rb.useGravity = runWall.EnableGravity(); wallCinemachine.wallRunCameraReset(); isWallRun = false; } }
private void OnCollisionEnter(Collision collision)//One time event { IRunnableWall runnableWall = collision.gameObject.GetComponent <IRunnableWall>(); if (runnableWall != null && CheckWallRunRequirement()) { isWallRun = true; } }
private void OnCollisionExit(Collision collision) { IRunnableWall runnableWall = collision.gameObject.GetComponent <IRunnableWall>(); if (runnableWall != null && isWallRun) { isResetWallRun = true; DoWallRun(normalVector, runnableWall, isResetWallRun); //rb.useGravity = runnableWall.EnableGravity(); //lookAroundObject.wallRunCameraReset(pnSign); //isWallRun = false; isTouchingWall = false; } else if (runnableWall != null) { isTouchingWall = false; } }
private void OnCollisionStay(Collision collision)//Dynamic event { IRunnableWall runnableWall = collision.gameObject.GetComponent <IRunnableWall>(); //Debug.Log("Player Speed min is 7: " + rb.velocity.z); //Debug.Log("Can Wall run ? : " + CheckWallRunRequirement(setBuffer)); if (runnableWall != null)//First prior check it is runnable wall { signAngle = Vector3.SignedAngle(Vector3.up, collision.contacts[0].normal, collision.contacts[0].point); normalVector = collision.contacts[0].normal; //Debug.Log("Can Wall run : " + CheckWallRunRequirement()); if (Math.Abs(signAngle) > minWallAngle && Math.Abs(signAngle) < maxWallAngle)//Second prior check the wall angle is qualifiied or not { //Do all wall run and wall jump isTouchingWall = true; //pnSign = signAngle / Mathf.Abs(signAngle); DoWallRun(normalVector, runnableWall, isResetWallRun); } } }