пишу скрипт для 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" на набор функций. Ну, автору, наверное виднее...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Во всей игре внезапно перестал работать yield return new WaitForSeconds
Как правильно прочитать данные, чтобы были индексы и имена колонок?
Как увеличивать textarea, когда текста становится больше, чем можно увидеть в блоке? Это можно сделать на css? Если знаете решение на js, напишите,...
Обычно ссылки на определенный блок привязаны через idМожно ли как то сделать через class?