error CS1061: Type `UnityEngine.UI.Image’ does not contain a definition for `enable’ and no extension method `enable’ of type `UnityEngine.UI.Image’ could be found. Are you missing an assembly reference?
Код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class HealthSystem : MonoBehaviour {
public int health;
public int numberOfLives;
public Image[] lives;
public Sprite fullLive;
public Sprite emptyLive;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update ()
{
for (int i = 0; i < lives.Length; i++)
{
if (i < numberOfLives)
{
lives[i].enable = true;
}
else
{
lives[i].enable = false;
}
}
}
}
-
Вопрос задан
-
4617 просмотров
Компилятор тебе четко говорит, что у Image, нет свойства enable. Чтобы это проверить, идешь на офф сайт и ищешь класс Image. Находим инфу. Убеждаемся, что компилятор не соврал и изменяем на правильное свойство
Properties enabled
Как я понял у тебя есть на сцене много Image в канвасе, и тебе нужно их включать и выключать. Если я прав, то сделай вот что: обьяви не public Image[] lives; а public GameObject[] lives; так как на сцене у тебя обьекты GameObject, а Image — это компонент обьекта. И еще используй не enabled, а lives[i].SetActive(true/false);
Пригласить эксперта
-
Показать ещё
Загружается…
22 сент. 2023, в 13:48
300000 руб./за проект
22 сент. 2023, в 13:33
60000 руб./за проект
22 сент. 2023, в 13:26
300000 руб./за проект
Минуточку внимания
Assets\RoomSpawner.cs(35,58): error CS1061: ‘GameObject[]’ does not contain a definition for ‘Lenght’ and no accessible extension method ‘Lenght’ accepting a first argument of type ‘GameObject[]’ could be found (are you missing a using directive or an assembly reference?)это ошибка полностью
помогите пожалуйста разобраться.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RoomSpawner : MonoBehaviour
{
public Direction direction;
public enum Direction
{
Top,
Bottom,
Left,
Right,
None
}
private RoomVariants variants;
private int rand;
private bool spawned = false;
private float waitTime = 3f;
private void Start()
{
variants = GameObject.FindGameObjectWithTag(«Rooms»).GetComponent<RoomVariants>();
Destroy(gameObject, waitTime);
Invoke(«Spawn», 0.2f);
}
public void Spawn()
{
if (!spawned)
{
if(direction == Direction.Top)
{
rand = Random.Range(0, variants.topRooms.Lenght);
Instantiate(variants.topRooms[rand], transform.position, variants.topRooms[rand].transform.rotation);
}
else if(direction == Direction.Bottom)
{
rand = Random.Range(0, variants.bottomRooms.Lenght);
Instantiate(variants.bottomRooms[rand], transform.position, variants.bottomRooms[rand].transform.rotation);
}
else if(direction == Direction.Right)
{
rand = Random.Range(0, variants.rightRooms.Lenght);
Instantiate(variants.rightRooms[rand], transform.position, variants.rightRooms[rand].transform.rotation);
}
else if(direction == Direction.Left)
{
rand = Random.Range(0, variants.leftRooms.Lenght);
Instantiate(variants.leftRooms[rand], transform.position, variants.leftRooms[rand].transform.rotation);
}
spawned = true;
}
}
private void OnTriggerStay2D(Collider2D other)
{
if(other.CompareTag(«RoomPoint») && other.GetComponent<RoomSpawner>().spawned)
{
Destroy(gameObject);
}
}
}
Ошибки языка программирования C# — это нормальная часть процесса создания программ. Одной из распространенных ошибок, с которой разработчики могут столкнуться при работе с игровым движком Unity, является ошибка CS1061. В этой статье мы рассмотрим причины возникновения этой ошибки и способы ее исправления, чтобы успешно добавить скрипт на сцену в Unity.
Ошибка CS1061
Ошибка CS1061 означает, что компилятор C# не может найти указанный метод или свойство в объекте, к которому вы пытаетесь получить доступ. Эта ошибка часто возникает при попытке взаимодействовать с компонентами игрового объекта или другими объектами Unity, когда имя метода или свойства было неправильно набрано или объект не содержит такого метода или свойства.
Исправление ошибки
Вот несколько способов исправить ошибку CS1061 и успешно внести скрипт на сцену в Unity:
1. Проверить имена методов и свойств
Убедитесь, что вы правильно ввели имена методов или свойств объекта, к которому обращаетесь. Даже небольшая опечатка может привести к ошибке. Убедитесь, что имя точно совпадает с именем метода или свойства.
2. Убедиться, что объект содержит нужный метод или свойство
Проверьте, что объект, к которому вы обращаетесь, действительно содержит указанный метод или свойство. Если объект не содержит нужного элемента, вы получите ошибку CS1061.
3. Проверить тип объекта
Убедитесь, что тип объекта, к которому вы обращаетесь, соответствует ожидаемому типу. В некоторых случаях объект может содержать метод или свойство с тем же именем, но с другой сигнатурой, и это может привести к ошибке.
4. Проверить область видимости
Проверьте, что объект с методом или свойством, к которому вы обращаетесь, доступен в текущей области видимости. Если объект определен в другом классе или скрипте, убедитесь, что вы правильно настроили область видимости.
Примеры исправления ошибки
Вот несколько примеров исправления ошибки CS1061:
Пример 1:
// Ошибка CS1061
gameObject.FooMethod();
// Исправление
GetComponent<SomeComponent>().FooMethod();
Пример 2:
// Ошибка CS1061
myVariable.BarProperty = 10;
// Исправление
myVariable.GetComponent<SomeComponent>().BarProperty = 10;
Заключение
Ошибка CS1061 может быть вызвана неправильно введенными именами методов или свойств, отсутствием указанных методов или свойств в объекте, неправильно указанными типами или областями видимости. Проверьте эти аспекты, когда столкнетесь с этой ошибкой, и внесите необходимые исправления, чтобы успешно внести скрипт на сцену в Unity.
I’m running into the quite simple aforementioned error. I thought I’d fix it quite quickly, but even after quite some searching, I can’t for the life of me figure out what the problem is. I Have the following Interface:
public interface ITemperatureEmitter
{
float CurrentTemperatureAddon { get; }
}
I implement this in two other (empty for now) Interfaces:
public interface ITemperatureEmitterEnvironment : ITemperatureEmitter
public interface ITemperatureEmitterSphere : ITemperatureEmitter
Subsequently I use these three interfaces in the following class:
using System.Collections.Generic;
using UnityEngine;
public class TemperatureReceiver : MonoBehaviour, ITemperatureReceiver
{
public float PerceivedTemperature;
// Serialized for debug purposes
[SerializeField] private List<ITemperatureEmitterSphere> temperatureEmitterSpheres;
[SerializeField] private List<ITemperatureEmitterEnvironment> temperatureEmitterEnvironments;
[SerializeField] private float environmentTemperature;
[SerializeField] private float temperatureToModifyBy;
[SerializeField] private float currentTemperatureAddon;
[SerializeField] private float appliedTemperatureAddon;
[SerializeField] private float totalTemperatureAddon;
private void Update()
{
UpdatePerceivedTemperature();
}
private void OnTriggerEnter(Collider other)
{
if (other.GetComponent<ITemperatureEmitterSphere>() != null)
{
temperatureEmitterSpheres.Add(other.GetComponent<ITemperatureEmitterSphere>());
}
else if (other.GetComponent<ITemperatureEmitterEnvironment>() != null)
{
temperatureEmitterEnvironments.Add(other.GetComponent<ITemperatureEmitterEnvironment>());
}
}
private void OnTriggerExit(Collider other)
{
if (other.GetComponent<ITemperatureEmitterSphere>() != null)
{
temperatureEmitterSpheres.Remove(other.GetComponent<ITemperatureEmitterSphere>());
}
else if (other.GetComponent<ITemperatureEmitterEnvironment>() != null)
{
temperatureEmitterEnvironments.Remove(other.GetComponent<ITemperatureEmitterEnvironment>());
}
}
private void UpdatePerceivedTemperature()
{
ModifyPerceivedTemperature(temperatureEmitterSpheres);
ModifyPerceivedTemperature(temperatureEmitterEnvironments);
}
private void ModifyPerceivedTemperature<ITemperatureEmitter>(List<ITemperatureEmitter> list)
{
if (list.Count > 0)
{
foreach (var item in list)
{
currentTemperatureAddon += item.CurrentTemperatureAddon;
}
currentTemperatureAddon = currentTemperatureAddon / list.Count;
appliedTemperatureAddon = PerceivedTemperature;
temperatureToModifyBy = currentTemperatureAddon = appliedTemperatureAddon;
PerceivedTemperature += temperatureToModifyBy;
}
}
}
Now the item.CurrentTemperatureAddon
in the ModifyPercievedTemperature
method emits «error CS1061: Type ITemperatureEmitter
does not contain a definition for CurrentTemperatureAddon
and no extension method CurrentTemperatureAddon
of type ITemperatureEmitter
could be found. Are you missing an assembly reference?«
ITemperatureEmitter
quite literally does contain a definition for CurrentTemperatureAddonm
… Anyone has an idea what’s happening here?
I just opened my unity 2d project and these 3 errors appeared,
Library\PackageCache\com.unity.collab-proxy@2.0.3\Editor\PlasticSCM\UI\Images.cs(441,20): error CS1061: ‘Texture2D’ does not contain a definition for ‘ignoreMipmapLimit’ and no accessible extension method ‘ignoreMipmapLimit’ accepting a first argument of type ‘Texture2D’ could be found (are you missing a using directive or an assembly reference?)
Library\PackageCache\com.unity.collab-proxy@2.0.3\Editor\PlasticSCM\UI\Images.cs(441,48): error CS1061: ‘Texture2D’ does not contain a definition for ‘ignoreMipmapLimit’ and no accessible extension method ‘ignoreMipmapLimit’ accepting a first argument of type ‘Texture2D’ could be found (are you missing a using directive or an assembly reference?)
Library\PackageCache\com.unity.collab-proxy@2.0.3\Editor\PlasticSCM\UI\Images.cs(451,20): error CS1061: ‘Texture2D’ does not contain a definition for ‘ignoreMipmapLimit’ and no accessible extension method ‘ignoreMipmapLimit’ accepting a first argument of type ‘Texture2D’ could be found (are you missing a using directive or an assembly reference?)
the errors weren’t there last time I closed the project
when I click on the error message it takes me to a script I never created called «Images.cs»
In the script, the 3 errors are under each «ignoreMipmapLimit» in these lines:
internal static Texture2D GetNewTextureFromTexture(Texture2D texture)
{
Texture2D result = new Texture2D(texture.width, texture.height);
result.ignoreMipmapLimit = texture.ignoreMipmapLimit;
return result;
}
internal static Texture2D GetNewTextureFromBytes(int width, int height, byte[] bytes)
{
Texture2D result = new Texture2D(width, height);
result.LoadImage(bytes);
result.ignoreMipmapLimit = true; // ignore global quality settings
return result;
}
I tried closing and opening the project again but the errors were still there,
I also reimported all the assets but the errors were still there
>Solution :
-
Close Unity.
-
Open this file
<Project Root Folder>\Packages\manifest.json
with a text editor. -
Find this line
"com.unity.collab-proxy":"2.0.3"
, delete it, save file. -
Open Unity. If you still need this package, you can install the lastest version from the package manager, search «Unity Collaborate».