Я работаю над учебником «Космический шутер» на веб-сайте единства (here), и у меня возникают проблемы со следующим кодом. Я пытаюсь установить ограничения на корабли Rigidbody
, чтобы он не мог покинуть видимую область игры. Тем не менее, я получаю следующее сообщение об ошибке, и я не могу понять, почему (это буквально мой первый раз с помощью C# также, очень жаль, если это действительно очевидно, что не так):Unity tutorial (Space Shooter), C# NullReferenceException
Ошибка:
NullReferenceException: Object reference not set to an instance of an object
PlayerController.FixedUpdate() (at Assets/Scripts/PlayerController.cs:28)
я пометил строка 28 (упоминается в сообщении об ошибке) ниже
Сценарий:
using UnityEngine;
using System.Collections;
public class Boundary
{
public float xMin, xMax, zMin, zMax;
}
public class PlayerController : MonoBehaviour
{
public float speed;
public Boundary b;
public Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate() {
float moveHorizontal = Input.GetAxis ("Horizontal");
float moveVertical = Input.GetAxis ("Vertical");
Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
rb.velocity = movement * speed;
rb.position = new Vector3( \\ *** line 28 ***
Mathf.Clamp (rb.position.x, b.xMin, b.xMax),
0.0f,
Mathf.Clamp (rb.position.z, b.zMin, b.zMax)
);
}
}
Любая помощь в разрешении этой ошибки очень ценится, скрипт в самом учебнике не совместим с unit5, кажется, но я просто не вижу, как эта ошибка правильная.
'b' is null? ... –
Должен ли я сделать b = новый Граница или что-то в этом роде? – Totem
Я не знаю, я понятия не имею, где вы хотите, или нужно инициализировать вещь. Но да, вам нужно где-то создать новую границу и назначить ее в поле. Если вы этого не сделаете, он останется пустым. –