не работает прыжок в FixedUpdate

Физика в Unity

не работает прыжок в FixedUpdate

Сообщение Huruffus 18 сен 2012, 17:13

Здравствуйте!

Всё началось с того, что я создал Билд и запустил его на "Fantastic" уровне графики. И тут я заметил, что скорость шара

заметно отличается от того, что была в несобранной игре (подскажите каким словом это назвать).
Я разобрался и узнал, что расчёт физики нужно проводить в FixedUpdate, а не в Update. Я сменил название события, и снова

запустил билд с наихудшим качеством.
Всё отлично - шар катается с нужной скоростью! Но не тут то было. Оказывается из за того, что я сменил событие, в котором

прописан весь контроллер шара, у меня очень редко стал срабатывать "прыжок" (примерно один раз в 15 нажатий на клавишу). Далее я

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

клавишу. Т.е. чем ниже качество - тем реже работает прыжок.

Пожалуйста, помогите разобраться с этим. Прикрепляю скрипт и билд.

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class characterSphere : MonoBehaviour {
       
        public float LeftV = 8; //движение влево
        public float RightV = -8; //движение вправо
        public Vector3 UpV = new Vector3(0, 5, 0); //вектор прыжка
       
        public RaycastHit boxhit;
        public Vector3 rayVector = new Vector3(0,-0.1F,0);
        public float distance;
        public Vector3 redLine;
       
        void Start () {        
                rigidbody.collisionDetectionMode = CollisionDetectionMode.Discrete;                    
                distance = boxhit.distance;
                }
       
        void FixedUpdate () {
                //движемся влево
                 if (Input.GetKey(KeyCode.A))
                        rigidbody.AddForce(0, 0, LeftV);
                //движемся вправо
                if (Input.GetKey(KeyCode.D))
                        rigidbody.AddForce(0, 0, RightV);
               
                //прыжок
                if (Input.GetKeyDown(KeyCode.E))
                        if (Physics.Raycast(transform.position, new Vector3(0,-0.1F,0), out boxhit, 0.5F)){
                                   Debug.DrawLine (transform.position, boxhit.point);
                        rigidbody.AddForce(UpV, ForceMode.Impulse);
                }
               
                //передвижение в воздухе
                if (Physics.Raycast(transform.position, new Vector3(0,-0.1F,0), out boxhit, 0.5F)){    
                        LeftV = 8;
                        RightV = -8;
                }
                        else {
                                        LeftV = 5;
                                        RightV = -5;
                                }
        }
}              
У вас нет доступа для просмотра вложений в этом сообщении.
_ttp://rebirthgame.tumblr.com/
@jonarhipov
vk.com/jonarhipov
_jonarhipov@gmail.com
Huruffus
UNITрон
 
Сообщения: 174
Зарегистрирован: 02 июл 2012, 20:53
  • Сайт

Re: не работает прыжок в FixedUpdate

Сообщение AndreyMust19 18 сен 2012, 17:45

Физику, как вы верно заметили, нужно выполнять в FixedUpdate. А вот опрос управления и игровую логику - надо оставить в Update.
Вам надо отделить Input.GetKey* и rigidbody.AddForce друг от друга. Нажатие E выполняется только 1 раз (в отличие от удержания клавиш A и D), поэтому
rigidbody.AddForce(UpV, ForceMode.Impulse);
можно оставить в Update.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: не работает прыжок в FixedUpdate

Сообщение Huruffus 18 сен 2012, 17:51

если так сделать, то скорость прыжка будет меняться в зависимости от качества графики.
я уже пробовал так
_ttp://rebirthgame.tumblr.com/
@jonarhipov
vk.com/jonarhipov
_jonarhipov@gmail.com
Huruffus
UNITрон
 
Сообщения: 174
Зарегистрирован: 02 июл 2012, 20:53
  • Сайт

Re: не работает прыжок в FixedUpdate

Сообщение AndreyMust19 18 сен 2012, 17:55

Говорю же - оставьте вот это:
Синтаксис:
Используется csharp
                if (Input.GetKeyDown(KeyCode.E))
                        if (Physics.Raycast(transform.position, new Vector3(0,-0.1F,0), out boxhit, 0.5F)){
                                   Debug.DrawLine (transform.position, boxhit.point);
                        rigidbody.AddForce(UpV, ForceMode.Impulse);
                }

В Update, а вот
rigidbody.AddForce(0, 0, LeftV);
и
rigidbody.AddForce(0, 0, RightV);
- перенесите в FixedUpdate.
Ваш прыжок никак от качества графики не зависит, оба поля в параметрах AddForce - константы (если только вы где-то еще UpV не меняете).
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: не работает прыжок в FixedUpdate

Сообщение Huruffus 19 сен 2012, 09:48

Спасибо большое
_ttp://rebirthgame.tumblr.com/
@jonarhipov
vk.com/jonarhipov
_jonarhipov@gmail.com
Huruffus
UNITрон
 
Сообщения: 174
Зарегистрирован: 02 июл 2012, 20:53
  • Сайт


Вернуться в PhysX

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

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