@volkov12feb

Что делать с данной ошибкой, никак не могу найти решение?

Добрый день. Подскажите, в чем может быть проблема - никак не могу найти решение. При уничтожении объекта - выходит очень много ошибок. Хотя не совсем понятно, из-за чего62b040d23af45141991032.png
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;

public class GameController : MonoBehaviour
{

	private CubePos nowCube = new CubePos(0, 1, 0);
	public float cubeChangePlaceSpeed = 0.5f;
	public Transform cubeToPlace;
	public GameObject cubeToCreate, allCubes;
	private Rigidbody allCubesRb;

	private bool isLose;

	private List<Vector3> allCubesPositions = new List<Vector3> {
		new Vector3(0, 0, 0),
		new Vector3(1, 0, 0),
		new Vector3(-1, 0, 0),
		new Vector3(0, 1, 0),
		new Vector3(0, 0, 1),
		new Vector3(0, 0, -1),
		new Vector3(1, 0, 1),
		new Vector3(-1, 0, -1),
		new Vector3(-1, 0, 1),
		new Vector3(1, 0, -1),
	};

	private Coroutine showCubePlace;

	private void Start()
	{
		allCubesRb = allCubes.GetComponent<Rigidbody>();
		StartCoroutine(ShowCubePlace());
	}

	private void Update()
	{
		if ((Input.GetMouseButtonDown(0) || Input.touchCount > 0) && cubeToPlace != null)
		{
#if !UNITY_EDITOR
			if (Input.GETTOUCH(0).phase != TouchPhase.Began) return;
#endif
			GameObject newCube = Instantiate(cubeToCreate, cubeToPlace.position, Quaternion.identity) as GameObject;
			newCube.transform.SetParent(allCubes.transform);
			nowCube.setVector(cubeToPlace.position);
			allCubesPositions.Add(nowCube.getVector());
			allCubesRb.isKinematic = true;
			allCubesRb.isKinematic = false;
			SpawnPosition();
		}

		if (!isLose && allCubesRb.velocity.magnitude > 0.1f)
		{
			Destroy(cubeToPlace.gameObject);
			StopCoroutine(showCubePlace);
			isLose = true;
		}
	}

	IEnumerator ShowCubePlace()
	{
		while (true)
		{
			SpawnPosition();
			yield return new WaitForSeconds(cubeChangePlaceSpeed);
		}
	}

	private void SpawnPosition()
	{
		List<Vector3> positions = new List<Vector3>();
		if (IsPositionEmpty(new Vector3(nowCube.x + 1, nowCube.y, nowCube.z)) && nowCube.x + 1 != cubeToPlace.position.x)
			positions.Add(new Vector3(nowCube.x + 1, nowCube.y, nowCube.z));
		if (IsPositionEmpty(new Vector3(nowCube.x - 1, nowCube.y, nowCube.z)) && nowCube.x - 1 != cubeToPlace.position.x)
			positions.Add(new Vector3(nowCube.x - 1, nowCube.y, nowCube.z));
		if (IsPositionEmpty(new Vector3(nowCube.x, nowCube.y + 1, nowCube.z)) && nowCube.y + 1 != cubeToPlace.position.y)
			positions.Add(new Vector3(nowCube.x, nowCube.y + 1, nowCube.z));
		if (IsPositionEmpty(new Vector3(nowCube.x, nowCube.y - 1, nowCube.z)) && nowCube.y - 1 != cubeToPlace.position.y)
			positions.Add(new Vector3(nowCube.x, nowCube.y - 1, nowCube.z));
		if (IsPositionEmpty(new Vector3(nowCube.x, nowCube.y, nowCube.z + 1)) && nowCube.z + 1 != cubeToPlace.position.z)
			positions.Add(new Vector3(nowCube.x, nowCube.y, nowCube.z + 1));
		if (IsPositionEmpty(new Vector3(nowCube.x, nowCube.y, nowCube.z - 1)) && nowCube.z - 1 != cubeToPlace.position.z)
			positions.Add(new Vector3(nowCube.x, nowCube.y, nowCube.z - 1));

		cubeToPlace.position = positions[UnityEngine.Random.Range(0, positions.Count)];
	}

	private bool IsPositionEmpty(Vector3 targetPos)
	{
		if (targetPos.y == 0)
			return false;
		foreach (Vector3 pos in allCubesPositions)
			if (pos.x == targetPos.x && pos.y == targetPos.y && pos.z == targetPos.z)
				return false;
		return true;
	}
}

struct CubePos
{
	public int x, y, z;

	public CubePos(int x, int y, int z)
	{
		this.x = x;
		this.y = y;
		this.z = z;
	}

	public Vector3 getVector()
	{
		return new Vector3(x, y, z);
	}

	public void setVector(Vector3 pos)
	{
		x = Convert.ToInt32(pos.x);
		y = Convert.ToInt32(pos.y);
		z = Convert.ToInt32(pos.z);
	}
}
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 1
LittleBob
@LittleBob
У вас в самой ошибке написано, что объект был удален и компонент Rigidbody больше нельзя получить.
В Update'те, где вы взаимодействуете с Rigidbody, необходимо сделать if проверку на его существование.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы