«Подарунок» від Unity

Підписуйтеся на Telegram-канал @gamedev_dou, щоб не пропустити найважливіші статті і новини про геймдев.

Привіт. Вирішив зайнятися розробкою власної гри і як «екземпляр» взяв відео за цією адресою (це 3 урок з 17)
www.youtube.com/...​DjO8dL0Y6X0ZFGaMt&index=4
Я прописав код згідно інструкції... Все працювало нормально, а потім Unity зробило мені «Подарунок»: помилки, які я не можу прибрати, хоча код прописаний правильно...
КОД

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace Com.Kawaiisun.SimpleHostile
{
public class Move : MonoBehaviour
{
public float speed;
public float sprintModifier;
public float jumpForse;
public Camera normalCam;
public Transform groundDetector;
public LayerMask ground;

private Rigidbody rig;

private float baseFOV;
private float sprintFOVModifier = 1.5f;

void Start()
{
baseFOV = normalCam.fieldOfView;
Camera.main.enabled = false;
rig = GetComponent();
}

void FixedUpdate()
{
float t_hmove = Input.GetAxisRaw("Horizontal");
float t_vmove = Input.GetAxisRaw("Vertical");

bool sprint = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift);
bool jump = Input.GetKeyDown(KeyCode.Space);

bool isgrounded = Physics.Raycast(groundDetector.position, Vector3.down, 0.1f, ground);
bool isjumping = jump && isgrounded;
bool issprinting = sprint && t_vmove > 0 && !isjumping && isgrounded;

if (isjumping)
{
rig.AddForce(Vector3.up * jumpForse);
}

Vector3 t_direction = new Vector3(t_hmove, 0, t_vmove);
t_direction.Normalize();

float t_adjustedspeed = speed;
if (issprinting)
{
t_adjustedspeed *= speed;
}

Vector3 t_targetvelocity = transform.TransformDirection(t_direction) * t_adjustedspeed * Time.deltaTime;
t_targetvelocity.y = rig.velocity.y;
rig.velocity = t_targetvelocity;

if (issprinting)
{
normalCam.fieldOfView = Mathf.Lerp(normalCam.fieldOfView, baseFOV * sprintFOVModifier, Time.deltaTime * 8f);
}
else
{
normalCam.fieldOfView = Mathf.Lerp(normalCam.fieldOfView, baseFOV, Time.deltaTime * 8f);
}
}
}
}
Помилки
NullReferenceException: Object reference not set to an instance of an object
Com.Kawaiisun.SimpleHostile.Move.Start () (at Assets/Scripts/Move.cs:24)
NullReferenceException: Object reference not set to an instance of an object
Com.Kawaiisun.SimpleHostile.Move.FixedUpdate () (at Assets/Scripts/Move.cs:55)

Причому перша вискакує 1 раз, а друга — нескінченно...

Тому прошу тих, хто знається на Unity підкажіть, будь ласка, що треба зробити, щоб не видавало помилку... Якщо що версія Unity 2019.3

Також хочу спитати вашої поради з приводу мови програмування. Я знаю декілька мов програмування (Python, C++, JS, Java) але лише на базовому рівні (окрім Python)(змінні, типи даних, цикли, масиви, функції). А тому підкажіть, будь ласка, яку мову програмівання краще вивчати для того, аби створити гру. Дякую за увагу.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Внимательней делайте копипаст кода и телодвижений автора :)
rig = GetComponent<ТУТ ОШИБКА>();
Удостоверьтесь, что камера назначена в поле normalCam, но судя по ошибке, то вы убрали с одной из камер тег main и назначили её в поле normalCam.
Покажите, какую камеру вы назначили в поле normalCam и какой тег у неё.

т.е (если я не ошибаюсь, т.к урока не смотрел) В игре должно быть две камеры:
1. с тегом мейн, которую вы отключаете (и скорее всего 1-я ошибка отсюда)
2. без тега, которую вы должны назначить в соответствующее поле

Так и есть... А что в такой ситуации надо сделать?

По первой ошибке — создайте камеру с тегом МейнКамера
По второй — удостоверьтесь, что у объекта есть компонент Rigidbody

Или закомм. эту строчку. (если камера больше нигде не используется пока-что)

Camera.main.enabled = false;

1. Уже было... Все равно проблема... Вместо картинки от лица игрока выводиться черный экран, на котором написано: «Display 1 No cameras rendering»...

Перейди пж по этой ссылке... Там можно с фото посмотреть, что да как...

www.cyberforum.ru/unity/thread2945687.html

А вы скрипт сохранили перед тем, как запускать игру ? :)

Я это понимаю... Я еще этот вопрос закинул на киберфорум... Мне там дали совет, но все равно не работает...

Вот ссылка:
www.cyberforum.ru/unity/thread2945687.html

Властивість baseFOV має модифікаьор приватний і немає методу як до нього достукатись. Здається так

rig = GetComponent(); в START, можливо лається на це.
І я не розумію шо таке Transform GroundDetector можливо в інспекторі пусте поле TRANSFORM

Короче, нулРеференсЕксепшн це завжди помилка «риб’ячої пам’яті», коли забуваєш шось засетапити))))))

Мені вже порекомендували як виправити, але все одно не працює... Якщо гарно розбираєтесь в Юніті, то пишіть в Телеграм на @Tatibana_Akihiro

Nullreferenceexception
Скорей всего в редакторе не установил камеру на поле normalCam и там нул

>яку мову програмівання краще вивчати для того, аби створити гру
Тільки C#, тільки Unity. Саме цей рушій та саме ця мова зараз набирають актуальності у геймдеві. Кількість вакансій для юніті-розробників перевищує сотню лише на dou. А у тому ж LinkedIn їх ще більше. Тому, якщо хочеш розробляти ігри та бути спокійним, що ти не залишишся без роботи, обирай Unity.
Також можеш обрати більш складний шлях — C++ та Unreal Engine, але такі розробники, нажаль, нікому не потрібні. Цей рушій використовується лише в AAA-іграх, тож вакансій ти не знайдеш і сидітимеш без роботи. Обирай сам)

лише в AAA-іграх

А смысл пилить гнилые платформеры и мобильный шлак за копейки?:)

По-перше, капіталізація ринку мобільних ігор набагато перевищує капіталізацію ААА. Відповідно й зп вище.
Ви, я бачу, взагалі не розбираєтеся в темі, якщо вважаєте що платформери досі актуальні, а всі мобільні ігри — «шлак». Вчи матчастину, чоловіче

Ви, я бачу

Читать не умеете.
Я не писал что платформеры актуальны:)

По-перше, капіталізація ринку мобільних ігор набагато перевищує капіталізацію ААА.

Пофиг на капитализацию, продукт сам по себе унылое говно в 99.9% случаев. 0.1% это всякие genshin impact, lol и pubg. Про зп хз, то что я видел на укр рынке — дно. Остается надежда на гиганты типо Valve, Blizzard и т.д. А это как раз те самые ААА проекты.

яку мову програмівання краще вивчати для того, аби створити гру

Ту, з якої хочеш найбільше копіпасти. Тобто, нафіга писати щось з нуля, коли можна взяти щось умовно безкоштовне та побачити як воно в людей працює.

А так то C++, якщо хочеш реально солідну гру, а не пет-проект. Бо ігри — це завжди про продуктивність заліза. А це точно не про Unity.

Не обманюйте людей, шановний!!!!!) Юніті менш продуктивний лише за Анріал, та навіть так він всеодно чудово справляється з графікою. Цілком припускаю, що оптимізація і в Юніті, і в Анріалі займає багато часу. Проблема продуктивності не лише в движку, але і в компетентності розробника. А тут вступає його королівська величність С#, з яким набагато простіше вести діалог))

Підписатись на коментарі