Починить танк)

Программирование на Юнити.

Починить танк)

Сообщение andrej40000 08 июн 2020, 01:15

Синтаксис:
Используется csharp
        void  FixedUpdate (){
                       
                AnimateGears();
                Engine();
                Braking();
                Inputs();
                Audio();

        }
               
        void Engine(){

                //Speed Limiter.
                if(speed > maxSpeed){
                       
                        for(int i = 0; i < AllWheelColliders.Count; i++){
                                AllWheelColliders[i].motorTorque = 0;
                        }

                //Applying Motor Torque.
                }else{
                       
                        for(int i = 0; i < wheelColliders_L.Length; i++){
                               
                                if(!reversing){
                                        if(wheelColliders_L[i].isGrounded && Mathf.Abs(wheelColliders_L[i].rpm) < 1000)
                                                wheelColliders_L[i].motorTorque = engineTorque * Mathf.Clamp((Mathf.Clamp(motorInput, 0f, 1f)) + Mathf.Clamp(steerInput, -1f, 1f), -1f, 1f) * engineTorqueCurve.Evaluate(speed);
                                        else
                                                wheelColliders_L[i].motorTorque = 0;
                                }else{
                                        if(speed < 30){
                                                wheelColliders_L[i].motorTorque = (engineTorque * motorInput);
                                        }else{
                                                wheelColliders_L[i].motorTorque = 0;
                                        }
                                }
                               
                        }

                        for(int i = 0; i < wheelColliders_R.Length; i++){
                               
                                if(!reversing){
                                        if(wheelColliders_R[i].isGrounded && Mathf.Abs(wheelColliders_R[i].rpm) < 1000)
                                                wheelColliders_R[i].motorTorque = engineTorque * Mathf.Clamp((Mathf.Clamp(motorInput, 0f, 1f)) + Mathf.Clamp(-steerInput, -1f, 1f), -1f, 1f) * engineTorqueCurve.Evaluate(speed);
                                        else
                                                wheelColliders_R[i].motorTorque = 0;
                                }else{
                                        if(speed < 30){
                                                wheelColliders_R[i].motorTorque = (engineTorque * motorInput);
                                        }else{
                                                wheelColliders_R[i].motorTorque = 0;
                                        }
                                }
                               
                        }
                       
                }

                //Steering.
                if(!reversing){
                        if(wheelColliders_L[2].isGrounded || wheelColliders_R[2].isGrounded){
                                if(Mathf.Abs(rigid.angularVelocity.y) < 1f){
                                        rigid.AddRelativeTorque((Vector3.up * steerInput) * steerTorque, ForceMode.Acceleration);
                                }
                        }
                }else{
                        if(wheelColliders_L[2].isGrounded || wheelColliders_R[2].isGrounded){
                                if(Mathf.Abs(rigid.angularVelocity.y) < 1f){
                                        rigid.AddRelativeTorque((-Vector3.up * steerInput) * steerTorque, ForceMode.Acceleration);
                                }
                        }
                }
                       
        }

        void Braking(){
               
                for(int i = 0; i < AllWheelColliders.Count; i++){
                       
                        if(motorInput == 0){
                                if(speed < 25 && Mathf.Abs(steerInput) < .1f)
                                        AllWheelColliders[i].brakeTorque = brakeTorque / 5f;
                                else
                                        AllWheelColliders[i].brakeTorque = 0;
                        }else if(motorInput < -.1f && AllWheelColliders[0].rpm > 50){
                                AllWheelColliders[i].brakeTorque = brakeTorque * (Mathf.Abs(motorInput));
                        }else{
                                AllWheelColliders[i].brakeTorque = 0;
                        }
                       
                }
               
        }

        void Inputs(){
               
                //Motor Input.
                motorInput = Input.GetAxis("Vertical");
               
                //Steering Input.
                steerInput = Input.GetAxis("Horizontal");
               
                //Reversing Bool.
                if(motorInput < 0  && AllWheelColliders[0].rpm < 50)
                        reversing = true;
                else reversing = false;
               
                speed = rigid.velocity.magnitude * 3.0f;
               
                //Acceleration Calculation.
                acceleration = 0f;
                acceleration = (transform.InverseTransformDirection(rigid.velocity).z - lastVelocity) / Time.fixedDeltaTime;
                lastVelocity = transform.InverseTransformDirection(rigid.velocity).z;
               
                //Drag Limit.
                rigid.drag = Mathf.Clamp((acceleration / 10f), 0f, 1f);
               
                //EngineRPM
                engineRPM = Mathf.Clamp((((Mathf.Abs((wheelColliders_L[0].rpm + wheelColliders_R[0].rpm)) * 5f) + minEngineRPM)), minEngineRPM, maxEngineRPM);
               
        }
 

ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
System.ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource) (at <437ba245d8404784b9fbab9b439ac908>:0)
System.ThrowHelper.ThrowArgumentOutOfRangeException () (at <437ba245d8404784b9fbab9b439ac908>:0)
System.Collections.Generic.List`1[T].get_Item (System.Int32 index) (at <437ba245d8404784b9fbab9b439ac908>:0)
RTCTankController.Inputs () (at Assets/main/Physics Based Tank Controller/Scripts/RTCTankController.cs:418)
RTCTankController.FixedUpdate () (at Assets/main/Physics Based Tank Controller/Scripts/RTCTankController.cs:320)
помогите исправить ошибку появляется когда хочу поехать назад на s
прикрепил код с 314 строки по 418
и видео https://youtu.be/zrmrmyDBjU4
andrej40000
UNец
 
Сообщения: 41
Зарегистрирован: 06 июн 2020, 19:14

Re: Починить танк)

Сообщение seaman 08 июн 2020, 12:11

Укажите конкретную строку с ошибкой
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Починить танк)

Сообщение andrej40000 09 июн 2020, 12:46

seaman писал(а):Укажите конкретную строку с ошибкой

ну он вот это выдает:

ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index


System.ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource) (at <437ba245d8404784b9fbab9b439ac908>:0)
System.ThrowHelper.ThrowArgumentOutOfRangeException () (at <437ba245d8404784b9fbab9b439ac908>:0)
System.Collections.Generic.List`1[T].get_Item (System.Int32 index) (at <437ba245d8404784b9fbab9b439ac908>:0)
RTCTankController.Inputs () (at Assets/main/Physics Based Tank Controller/Scripts/RTCTankController.cs:418)
RTCTankController.FixedUpdate () (at Assets/main/Physics Based Tank Controller/Scripts/RTCTankController.cs:320)
andrej40000
UNец
 
Сообщения: 41
Зарегистрирован: 06 июн 2020, 19:14

Re: Починить танк)

Сообщение andrej40000 09 июн 2020, 12:47

andrej40000 писал(а):
seaman писал(а):Укажите конкретную строку с ошибкой

ну он вот это выдает:

ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index


System.ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource) (at <437ba245d8404784b9fbab9b439ac908>:0)
System.ThrowHelper.ThrowArgumentOutOfRangeException () (at <437ba245d8404784b9fbab9b439ac908>:0)
System.Collections.Generic.List`1[T].get_Item (System.Int32 index) (at <437ba245d8404784b9fbab9b439ac908>:0)
RTCTankController.Inputs () (at Assets/main/Physics Based Tank Controller/Scripts/RTCTankController.cs:418)
RTCTankController.FixedUpdate () (at Assets/main/Physics Based Tank Controller/Scripts/RTCTankController.cs:320)


320: Inputs();
418-421: if(motorInput < 0 && AllWheelColliders[0].rpm < 50)
reversing = true;
else reversing = false;

speed = rigid.velocity.magnitude * 3.0f;
andrej40000
UNец
 
Сообщения: 41
Зарегистрирован: 06 июн 2020, 19:14

Re: Починить танк)

Сообщение seaman 09 июн 2020, 14:55

AllWheelColliders пустой. Нет ни одного элемента.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Починить танк)

Сообщение andrej40000 09 июн 2020, 22:46

seaman писал(а):AllWheelColliders пустой. Нет ни одного элемента.

ну я вроде понимаю что по нажатии клавиши назад значение становится вне диапазона указанного в коде. Но я не понимаю (at <437ba245d8404784b9fbab9b439ac908>:0) что тут не меняй в []. Можете подробнее объяснить что мне делать или я могу полный скрипт отправить.
andrej40000
UNец
 
Сообщения: 41
Зарегистрирован: 06 июн 2020, 19:14


Вернуться в Скрипты

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

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