пишу скрипт для unity, на движение колес машины при нажатии на кнопку она должна ехать но при запуске сцены выдаёт неприятную ошибку и я не знаю как это решить.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CarPhisics : MonoBehaviour {
WheelJoint2D[] wheelJoints;
JointMotor2D frontWheel;
JointMotor2D backWheel;
public float maxSpeed = -1000f;
private float maxBackSpeed = 1500f;
private float SpeedBoost = 250f;
private float deSpeedBoost = -100f;
public float brakeForce = 3000f;
private float gravity = 9.8f;
private float angleCar = 0;
public ClickScript[] ControlCar;
// Use this for initialization
void Start () {
wheelJoints = gameObject.GetComponents<WheelJoint2D>();
backWheel = wheelJoints[1].motor;
frontWheel = wheelJoints[0].motor;
}
// Update is called once per frame
void FixedUpdate () {
angleCar = transform.localEulerAngles.z;
if (angleCar >= 180)
{
angleCar = angleCar - 360;
}
if (ControlCar[0].clikedIs == true)
{
backWheel.motorSpeed = Mathf.Clamp(backWheel.motorSpeed - (SpeedBoost - gravity * Mathf.PI * (angleCar / 180) * 100) * Time.deltaTime, maxSpeed, maxBackSpeed);
}
if ((ControlCar[0].clikedIs == false && backWheel.motorSpeed < 0) || (ControlCar[0].clikedIs == false && backWheel.motorSpeed == 0 && angleCar < 0))
{
backWheel.motorSpeed = Mathf.Clamp(backWheel.motorSpeed - (deSpeedBoost - gravity * Mathf.PI * (angleCar / 180) * 100) * Time.deltaTime, maxSpeed, 0);
}
else if ((ControlCar[0].clikedIs == false && backWheel.motorSpeed > 0) || (ControlCar[0].clikedIs == false && backWheel.motorSpeed == 0 && angleCar > 0))
{
backWheel.motorSpeed = Mathf.Clamp(backWheel.motorSpeed - (-deSpeedBoost - gravity * Mathf.PI * (angleCar / 180) * 100) * Time.deltaTime, 0, maxBackSpeed);
}
wheelJoints[1].motor = backWheel;
wheelJoints[0].motor = frontWheel;
}
}
Выдаёт такую ошибку IndexOutOfRangeException: Array index is out of range.
CarPhisics.FixedUpdate () (at Assets/scripts/CarPhisics.cs:38)
Я глянул видос и нарисовал картинку как у вас всё должно быть (в хорошем качестве тут):
Ошибка IndexOutOfRangeException обозначает то, что вы пытаетесь обратиться к элементу массива, которого нету. (Если не поняли, что я сейчас написал, то вкратце: массив - набор элементов, в вашем случае набор из ClickScript-объектов. В коде вы, точнее, поц, написавший код, обращается к элементу под номер ноль, но массив, очевидно, пустой, и элемента с номером ноль - нет).
Как я понимаю вы забыли или неправильно перенесли скрипты "ClickScript" на объект "bodyporshe", из-за чего массив, который используется в коде - пустой.
Я видел как автор видео переносил объекты. Что б вам было понятнее, сделайте слегка по другому:
После этого данная ошибка в данном массиве невозможна.
.
Послесловие:
Люди вверху в комментариях грубы, но всё же правы, говоря то, что нужно начать с основ и потом перейти к курсам. Для начала хотя бы недельку попрограммируйте вне Unity. Просто вбейте в гугл "C# курс с нуля". Освойте переменные, массивы, желательно и классы, но тогда, конечно, понадобиться около месяца минимум. Может это будет не так интересно, ведь основы вам будут показывать в чёрно-белой консольке, но благодаря тому, что это просто консоль, ничто не отвлекает и всё +- понятно.
После того, как вы освоите основы, вы можете с гордостью посмотреть курсы по Unity, но начинать всеравно стоит с простых, там где попутно будут объяснять интерфейс программы. Напишите пару тройку простых игр и тогда можете делать посложнее, по типу этой.
Да, вы можете и сейчас её написать по урокам этого поца, но вы мало чему научитесь, так как просто копируете код и его действия, не сильно вникая как, что и почему он делает.
.
Послесловие 2 (если вы ещё не вникнули во всё высшесказанное - то лучше даже не читайте это, серьёзно):
Я слегка не понял, для чего он сделал массив скриптов для кнопок, можно было явно сделать 2 переменные для кнопки газа и кнопки тормоза. И почему бы не вынести переменные скриптов нажатия в отдельный класс по-типу GameController и просто по нажатию вызывать нужную функцию из скрипта "CarPhisics", заранее заменив его "FixedUpdate" на набор функций. Ну, автору, наверное виднее...
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости