«Запрещено вызывать загрузку из конструктора MonoBehaviour» В сценарии, который не наследуется от MonoBehaviour - PullRequest
0 голосов
/ 13 марта 2020

У меня есть два класса; BuildableObject и TempObject. По какой-то причине Unity обрабатывает TempObject как класс MonoBehaviour, в котором он выдает ошибку, если я использую Resources.Load() из конструктора.

Почему это так и как это исправить?

public abstract class BuildableObject {

    public abstract Vector2Int Space { get; set; }
    public abstract GameObject Body { get; set; }

    public void Init(GridSpace[,] World, Vector2Int pos) {
        Vector3 Pos = World[pos.x, pos.y].pos;

        //TODO: Optimize
        //TODO: Add availibility for multiple tile sizes
        Pos.x += Body.transform.lossyScale.x / 6;
        Pos.y += Body.transform.lossyScale.y / 6;

        Body.transform.position = Pos;

        Body.transform.position = new Vector3(Body.transform.position.x,Body.transform.position.y,-5);

        Object.Instantiate(Body);

        OnPlace();
    }

    public void OnPlace() { }
    public void OnUpdate() { }
    public void OnRemove() { }
    public void OnInteract(InteractData Data) { }

}
public class TempObject : BuildableObject {
    public override Vector2Int Space { get; set; } = new Vector2Int(2, 2);
    public override GameObject Body { get; set; }

    public TempObject() {
        Body = (GameObject)Resources.Load("BuildPrefabs/Test", typeof(GameObject)); //error
    }
}

1 Ответ

0 голосов
/ 13 марта 2020

Причина, по которой я получил ошибку, заключалась в том, что я инстанцировал TempObject из MonoBehaviour класса:

using UnityEngine;

public class Example : MonoBehaviour {
    public BuildableObject Selected = new TempObject(); // real error
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...