Exemple #1
0
    public void Moving()
    {
        //Debug.Log(player.forward);
        Vector3 forward = player.forward * movement.z; //двигаемся вперед/назад относительно того куда смотрит игрок
        Vector3 right   = player.right * movement.x;   //двигаемся влево/вправо относительно того куда смотрит игрок

        if (!GlobalInfo.CheckWallRun())
        {
            if (GlobalInfo.CheckGround())
            {
                body.MovePosition(body.position + forward * speed * Time.fixedDeltaTime);//осуществялем передвижение вперед/назад
            }
            else
            {
                body.MovePosition(body.position + forward * speedMove / 2 * Time.fixedDeltaTime);//осуществялем передвижение вперед/назад
            }
            //Debug.Log("Move");
        }
        else
        {
            jumps = 0;
        }
        if (GlobalInfo.CheckGround())
        {
            body.MovePosition(body.position + right * speed * Time.fixedDeltaTime);//осуществялем передвижение влево/вправо
        }
        else
        {
            body.MovePosition(body.position + right * speedMove / 2 * Time.fixedDeltaTime);//осуществялем передвижение влево/вправо
        }
    }
Exemple #2
0
    //функция прыжка
    void Jump()
    {
        Vector3 vec = new Vector3(0, jumpForce, 0);

        if (Input.GetAxisRaw("Vertical") > 0)
        {
            vec.x = player.forward.x * speedMove / 2;
            vec.z = player.forward.z * speedMove / 2;
        }
        else
        {
            if (Input.GetAxisRaw("Vertical") != 0)
            {
                vec.x = -player.forward.x * speedMove / 2;
                vec.z = -player.forward.z * speedMove / 2;
            }
        }
        if (Input.GetAxisRaw("Horizontal") > 0)
        {
            vec.x = (vec.x + player.right.x * speedMove / 2) / 2;
            vec.z = (vec.z + player.right.z * speedMove / 2) / 2;
        }
        else
        {
            if (Input.GetAxisRaw("Horizontal") != 0)
            {
                vec.x = (vec.x + (-player.right.x * speedMove / 2)) / 2;
                vec.z = (vec.z + (-player.right.z * speedMove / 2)) / 2;
            }
        }
        if (Input.GetKeyDown(KeyCode.Space) && (GlobalInfo.CheckGround() && !GlobalInfo.CheckWallRun()))//если нажали пробел и на земле
        {
            Debug.Log("Kick");
            body.velocity = vec;//пинаем вверх
            audio.Play("Jump");
        }
        else
        {
            if (Input.GetKeyDown(KeyCode.Space) && jumps != nJumps && !GlobalInfo.CheckWallRun())
            {
                body.velocity = vec;//пинаем вверх
                audio.Play("Jump" + jumps);
                jumps++;
            }
        }
    }
Exemple #3
0
 // Update is called once per frame
 void Update()
 {
     CheckClimbing();
     if (bodySee && !headSee)
     {
         Debug.Log("Можем подниматься");
     }
     if (bodySee && !headSee && !GlobalInfo.CheckGround() && Input.GetAxisRaw("Vertical") > 0 && !isClimbing) //если в вохдухе и двигаемся вперед
     {                                                                                                        //голова не видит стену,а тело видит то начинаем взбираться
         Debug.Log("Поднимаемся");
         upPos           = player.position;
         upPos.y         = newPos.y;
         isClimbing      = true;                          //помечаем это
         body.useGravity = false;                         //отрубаем гравитаюци.
         player.GetComponent <Control>().enabled = false; //отбираем управление у игрока
         Debug.Log("NewPos:" + newPos);
     }
 }
Exemple #4
0
 void SitDown()
 {
     if (Input.GetKey(KeyCode.C) && GlobalInfo.CheckGround())
     {
         if (GlobalInfo.ChecPodkat() && timer1 > 0)
         {
             timer1 -= Time.deltaTime;//подкат
             speed   = podkatSpeed;
             Debug.Log("PodkatSpeed");
         }
         else
         {
             speed = speedMove / 2;//сидим
             Debug.Log("MoveSpeed");
         }
         animator.SetBool("Sit", true);
         isSitDown = true;
     }
     else
     {
         bool upDown = false;
         if (isSitDown)
         {
             RaycastHit hit;
             Ray        ray = new Ray(transform.position, Vector3.up * 1); //создаем луч направленный вверх
             if (Physics.Raycast(ray, out hit, 1, layerMask))              //выпускаем луч определннеой длинны
             {
                 upDown = true;
             }
             else
             {
                 upDown = false;
             }
         }
         if (!upDown)
         {
             timer1 = longOfPodkat;
             speed  = speedMove;
             animator.SetBool("Sit", false);
             isSitDown = false;
         }
     }
 }
Exemple #5
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);
     }
 }