Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ошибка с interactable

Максим Краснобаев Ученик (127), на голосовании 3 месяца назад
не понимаю почему не работает interactable. Выдаёт ошибку
Ошибка (активно) CS1061 "Button" не содержит определения "interactable", и не удалось найти доступный метод расширения "interactable", принимающий тип "Button" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку). Вот код.

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

public class AchMenu : MonoBehaviour
{
public int total_money;
[SerializeField] Button firstAch;
[SerializeField] bool isFirst;
void Start()
{
total_money = PlayerPrefs.GetInt("total_money");
isFirst = PlayerPrefs.GetInt("isFirst") == 1 ? true : false;
if (total_money >= 1000 && !isFirst)
{
firstAch.interactable = true;
}
else
{
firstAch.interactable = false;
}
}

public void GetFirst()
{
int money = PlayerPrefs.GetInt("money");
money += 10;
PlayerPrefs.SetInt("money", money);
isFirst = true;
PlayerPrefs.SetInt("isFirst", isFirst ? 1 : 0);
}

void Update()
{

}

}
Голосование за лучший ответ
робот помощник Ученик (224) 4 месяца назад
Ошибка возникает из-за того, что свойство interactable должно быть с маленькой буквы 'i'. В Unity это свойство типа Button пишется с маленькой буквы. Вот исправленный код:
 using System.Collections; 
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class AchMenu : MonoBehaviour
{
public int total_money;
[SerializeField] Button firstAch;
[SerializeField] bool isFirst;

void Start()
{
total_money = PlayerPrefs.GetInt("total_money");
isFirst = PlayerPrefs.GetInt("isFirst") == 1 ? true : false;

if (total_money >= 1000 && !isFirst)
{
firstAch.interactable = true;
}
else
{
firstAch.interactable = false;
}
}

public void GetFirst()
{
int money = PlayerPrefs.GetInt("money");
money += 10;
PlayerPrefs.SetInt("money", money);
isFirst = true;
PlayerPrefs.SetInt("isFirst", isFirst ? 1 : 0);
}

void Update()
{

}
}
Теперь свойство interactable должно работать корректно.
Chromatic Scale Искусственный Интеллект (206329) 4 месяца назад
Ошибка связана с тем, что вы пытаетесь использовать свойство `interactable` с кнопкой, но, возможно, у вас отсутствует нужная директива `using`. В этом случае нужно убедиться, что у вас подключена сборка `UnityEngine.UI`.

Пожалуйста, проверьте, что у вас есть следующее в начале файла:

```csharp
using UnityEngine.UI;
```

Если это уже есть, попробуйте использовать метод `interactable` через свойство:

```csharp
firstAch.interactable = true;
```

Кроме того, стоит проверить правильность написания свойства и используемой версии Unity, так как возможны отличия в API.

Ваш исправленный код должен выглядеть следующим образом:

```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // Убедитесь, что эта строка присутствует

public class AchMenu : MonoBehaviour
{
public int total_money;
[SerializeField] Button firstAch;
[SerializeField] bool isFirst;
void Start()
{
total_money = PlayerPrefs.GetInt("total_money");
isFirst = PlayerPrefs.GetInt("isFirst") == 1 ? true : false;
if (total_money >= 1000 && !isFirst)
{
firstAch.interactable = true;
}
else
{
firstAch.interactable = false;
}
}

public void GetFirst()
{
int money = PlayerPrefs.GetInt("money");
money += 10;
PlayerPrefs.SetInt("money", money);
isFirst = true;
PlayerPrefs.SetInt("isFirst", isFirst ? 1 : 0);
}

void Update()
{

}

}
```

Если проблема сохраняется, попробуйте пересоздать кнопку в редакторе Unity или убедитесь, что ваш проект правильно настроен и содержит все необходимые сборки и директивы.
Похожие вопросы