//определение направления движения void Dir() { movement.x = Input.GetAxisRaw("Horizontal"); //влево и вправо movement.z = Input.GetAxisRaw("Vertical"); //вперед и назад if (Input.GetAxisRaw("Vertical") > 0) { if (!isSitDown) { timer2 -= Time.deltaTime; if (timer2 <= 0) { Debug.Log("True"); GlobalInfo.ChangePodkat(true); } } } else { GlobalInfo.ChangePodkat(false); timer2 = timerPodkat; } }
//пускаем лучи что бы понять есть ли стена справа и слева void WallRun() { if (Input.GetAxisRaw("Vertical") > 0 && (parkourAvailableRight || parkourAvailableLeft) && !GlobalInfo.CheckGround())//если бежим вперед, около стены и в вохдухе { GlobalInfo.ChangePodkat(true); if (Input.GetKeyDown(KeyCode.Space)) //если нам надо оттолкнуться от стены во время { //бега по стенам Vector3 vec; //вектор прыжка timer = 0.2f; //отключаем бег по стена на 0.2 Debug.Log(player.transform.right); if (parkourAvailableLeft) { vec = player.transform.right;//если надо отпрыгнуть врпаво } else { vec = -player.transform.right;//если надо отпрыгнуть влево } vec = vec * jumpForce; //vec.y = jumpForce;//прыжок не только в сторону но и вверх Debug.Log("vec=" + vec); Vector3 vec2 = new Vector3(0, jumpForce, 0); if (Input.GetAxisRaw("Vertical") > 0) { vec2.x = player.forward.x * speedMove / 2; vec2.z = player.forward.z * speedMove / 2; } else { if (Input.GetAxisRaw("Vertical") != 0) { vec2.x = -player.forward.x * speedMove / 2; vec2.z = -player.forward.z * speedMove / 2; } } body.velocity = vec + vec2;//делаем толчок } else { if (timer <= 0) { GlobalInfo.ChangeWallRun(true); if (parkourAvailableLeft) { animator.SetBool("WallLeft", true); } else { animator.SetBool("WallRight", true); } body.velocity = new Vector2(0, 0); //то значит бежим по стене body.MovePosition(body.position + wallRunVec * speedMove * Time.deltaTime); //осуществялем передвижение } else { timer -= Time.deltaTime; } } Debug.Log("Бежим по стене"); } else { GlobalInfo.ChangeWallRun(false); animator.SetBool("WallLeft", false); animator.SetBool("WallRight", false); } }