Top.Mail.Ru
Ответы

Помогите пожалуйста решить проблему, Пишу обычный скрипт На юнити, И тут вылезает ошибка cs0246.

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class NewBehaviourScript : MonoBehaviour

{

private Inventory Inventory;

public GameObject slotButton;

public int id;

private void Start()

{

inventory = GameObject.FindGameObjectWithTag("Player").GetComponent<inventory>();

}

private void OnTriggerEnter2D(Vollider2D other)

{

if (other.CompareTag("Player"))

{

for (int i = 0; i < inventory.slots.Length; i++)

{

if (inventory.isFull[i] == false)

{

inventory.isFull[i] = true;

Instantiate(slotButton, inventory.slots[i].transform);

Destroy(GameObject);

break;

}

}

}

}

}

По дате
По рейтингу
Аватар пользователя
Новичок
Изменено

Ошибка возникает потому, что переменная Inventory объявлена с заглавной буквы (private Inventory Inventory), однако далее в коде используется строчная буква (inventory) — компилятор воспринимает это как разные имена.

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class NewBehaviourScript : MonoBehaviour

{

// Используйте одну согласованную форму имени переменной

private Inventory inventory;

public GameObject slotButton;

public int id;

private void Start()

{

// Теперь правильно используем имя переменной

inventory = GameObject.FindGameObjectWithTag("Player").GetComponent<Inventory>();

}

private void OnTriggerEnter2D(Collider2D other)

{

if (other.CompareTag("Player"))

{

for (int i = 0; i < inventory.slots.Length; i++)

{

if (!inventory.isFull[i])

{

inventory.isFull[i] = true;

// Правильно используйте слот кнопки и объект инвентаря

Instantiate(slotButton, inventory.slots[i].transform.position, Quaternion.identity);

// Уничтожаем сам игровой объект с триггером (этот скрипт), а не произвольный объект!

Destroy(gameObject); // Не пишите просто Destroy(GameObject)

break;

}

}

}

}

}