Unity C # Ошибка: «Sprite» не содержит конструктор, который принимает 0 аргументов - PullRequest
0 голосов
/ 29 января 2019

Я работаю над системой предметов для своей игры в Unity.Я все еще довольно новичок в кодировании, но я прилагаю все усилия.

Моя система вещей Работает, получая доступ к интерфейсам с нужными мне данными.При попытке назначить мой спрайт из интерфейса частной переменной, я получаю ошибку «Sprite» не содержит конструктор, который принимает 0 аргументов ».Я искал все решения и не нашел никаких исправлений, которые бы работали для меня до сих пор.

Класс, который я создал для доступа к интерфейсу, выглядит следующим образом:

public class ISType : IISType {

    [SerializeField] string _name;

    [SerializeField] Sprite _icon;

    ISType()
    {
        _name = "Type";
        _icon = new Sprite(); }

    public string Name
    {
        get
        { return _name; }

        set
        { _name = value }
    }

    public Sprite Icon {
        get
        { return _icon; }

        set
        { _icon = value; }
}

}

Если кто-нибудь может сказать, что происходит, я был бы очень признателен за помощь!:)

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Похоже, что Sprite не содержит общедоступного конструктора, принимающего нулевые аргументы.

Класс без определенных конструкторов будет иметь конструктор без параметров.

public class MyClass { }

MyClass x= new MyClass(); // this is valid

Однако, если для него определены другие конструкторы, этот конструктор без параметров больше не является «заданным».

Разница между конструктором по умолчанию и параметром без параметровconstructor?

Answer by Nicole Calinoiu

Конструктор "default" добавляется компилятором C #, если ваш класс не содержит явного конструктора экземпляра.Это открытый конструктор без параметров.https://stackoverflow.com/a/10498709/5569485

public class MyClass { 
    public MyClass(string foo)
    { 
    }
}

MyClass x= new MyClass(); // this is invalid 

Класс должен будет вручную определять конструктор без параметров.

public class MyClass { 
   // parameterless constructor
    public MyClass()
    { 
    }

    public MyClass(string foo)
    { 
    }
}

MyClass x= new MyClass(); // this is valid again!

Иногда конструкторы не предоставляются публично, и вместо этого класс предоставляет статические методы длясоздать экземпляр объекта.

public class MyClass
{
    private MyClass()
    {
    }

    public static MyClass Create()
    {
        return new MyClass();
    }
}

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/private-constructors

Закрытый конструктор - это специальный конструктор экземпляра.Обычно используется в классах, которые содержат только статические члены.Если у класса есть один или несколько закрытых конструкторов и нет открытых конструкторов, другие классы (кроме вложенных классов) не могут создавать экземпляры этого класса.

Не зная больше о классе Sprite, я полагаю,что есть статический метод для создания экземпляров Sprite

что-то вроде

Sprite sprite = Sprite.Create(...);
0 голосов
/ 29 января 2019

Ответ в ошибке.Нет конструктора, который принимает 0 параметров для Sprite.Не видя код, я предполагаю, что вы создали собственный конструктор с параметрами и не добавили безпараметрический.

Конструктор по умолчанию без параметров будет выглядеть так:

Sprite()
{}

Обязательносделать намного больше чтения и учебников.Это довольно базовая информация о классе.

...