Игрок зависает при прыжке

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Игрок зависает при прыжке

Сообщение allash 08 авг 2012, 22:41

Всем привет. Есть небольшой вопрос, помогите пожалуйста
Есть скрипт игрока. Игрок ходит влево-вправо и прыгает. Почему когда я прыгаю и в прыжке нажимаю влево или вправо, он не падает а двигается влево или вправо в воздухе?
Синтаксис:
Используется csharp
public class PlayerScript : MonoBehaviour {
       
        public float groundSpeed = 20;
        public float airSpeed = 5;
        public float jumpSpeed = 300;
        public float maxSpeed = 4;
        public bool  limitSpeed = true;
        public float onGroundDrag = 1;
        public float inAirDrag = 0.1f;
       
        private bool  onGround;
        private bool  isJump;
       
        void Update ()
        {      
                if(Input.GetKeyDown(KeyCode.Space))
                        Jump();
        }

        void FixedUpdate ()
        {
                        rigidbody.AddForce(Input.GetAxisRaw("Horizontal") * transform.right * ((onGround) ? groundSpeed : airSpeed))
               
                if(isJump)
                {
                        rigidbody.AddForce(transform.up * jumpSpeed);                                  
                        onGround = false;                                                                              
                        isJump = false;
                        rigidbody.drag = inAirDrag;                                                    
                }
        }
        void Jump()
        {
                if(onGround)
                        isJump = true;
        }      

        void  LateUpdate ()
        {
                if(limitSpeed && Mathf.Abs(rigidbody.velocity.x) > maxSpeed)                   
                        rigidbody.velocity = new Vector3(Mathf.Sign(rigidbody.velocity.x) * maxSpeed, 0, 0);
               
        }

         void  OnCollisionEnter ( Collision collision  )
        {
                float collisionAngle = Vector3.Angle(collision.contacts[0].normal, Vector3.up);

                if(collisionAngle < 40.0f)
                {
                        onGround = true; //Player is grounded
                        rigidbody.drag = onGroundDrag; //Restore original drag value
                }
        }

       void  OnCollisionStay ( Collision collision )
        {      
                float collisionAngle= Vector3.Angle(collision.contacts[0].normal, Vector3.up);
       
                if(collisionAngle < 40.0f)
                {
                        onGround = true; //Player is grounded
                        rigidbody.drag = onGroundDrag; //Restore original drag value
                }
        }

        void OnCollisionExit ( Collision collision  )
        {
                onGround = false;
                rigidbody.drag = inAirDrag;
        }
       


}
 
allash
UNец
 
Сообщения: 46
Зарегистрирован: 15 ноя 2011, 22:38

Re: Игрок зависает при прыжке

Сообщение AndreyMust19 08 авг 2012, 23:27

Во-первых, первый аргумент AddForce задает направление толчка в глобальных координатах, если хотите transform.up или transfrom.right - пишите AddRelativeForce.
Во-вторых - поробуйте вторым аргументом написать ForceMode.VelocityChange или ForceMode.Impulse.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: Игрок зависает при прыжке

Сообщение allash 09 авг 2012, 09:07

исправил на AddRealativeForce, то же самое. А от AddImpule он вообще улетает далеко наверх
allash
UNец
 
Сообщения: 46
Зарегистрирован: 15 ноя 2011, 22:38

Re: Игрок зависает при прыжке

Сообщение allash 10 авг 2012, 10:33

Решил таким способом:
Синтаксис:
Используется csharp
 void  LateUpdate ()
        {
                if(limitSpeed && Mathf.Abs(rigidbody.velocity.x) > maxSpeed)        
                {
                         Vector3 temp =    rigidbody.velocity;
                          temp.x = Mathf.Sign(rigidbody.velocity.x) * maxSpeed;
                        rigidbody.velocity = temp
                    }          
                     
               
        }
 
allash
UNец
 
Сообщения: 46
Зарегистрирован: 15 ноя 2011, 22:38


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17