Exemple #1
0
 //пускаем лучи что бы понять есть ли стена справа и слева
 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);
     }
 }