система сброса предметов - как я могу правильно использовать сборные дома? - PullRequest
0 голосов
/ 05 апреля 2020

мой код довольно прост, но я новичок в единстве ... я пытаюсь сделать так, чтобы я мог бросать свои предметы на землю, когда я тащу из своего инвентаря, но не могу это сделать, с несколько последовательных ошибок. У меня есть префаб (только что узнал о них сегодня), который я пытаюсь изменить его рендерер спрайтов и создать его. Вот мой код:

public class ItemWorld : MonoBehaviour
{
    private Transform prefab;
    private Item item;
    private SpriteRenderer spriteRenderer;
    void Start()
    {
        prefab = Resources.Load("Prefabs/pfItemWorld") as GameObject;
        //myPrefab = Resources.Load("Prefabs/pfItemWorld");
    }
    public static ItemWorld spawnItemWorld(Vector3 position, Item item)
    {
        Transform transform = Instantiate(prefab, position, Quaternion.identity);
        ItemWorld itemWorld = transform.GetComponent<ItemWorld>();
        itemWorld.SetItem(item);
        return itemWorld;
    }

    private void Awake()
    {
        spriteRenderer = GetComponent<SpriteRenderer>();
    }
    public void SetItem(Item item)
    {
        this.item = item;

        Rect spriteRect = new Rect(0, 0, item.itemIcon.width, item.itemIcon.height);
        Sprite mySprite = Sprite.Create(item.itemIcon, spriteRect, new Vector2(0.5f, 0.5f));
        spriteRenderer.sprite = mySprite;
    }
}

Моя проблема в том, что я не могу загрузить префаб и использовать его в Instantiate без многих ошибок ... Что не так с моим кодом? Вот ошибки:

(1) Assets \ Scripts \ ItemWorld.cs (12,18): ошибка CS0029: невозможно неявное преобразование типа «UnityEngine.GameObject» в «UnityEngine.Transform» (да, я знаю что это значит, но как я могу использовать префаб без преобразования)

(2) Assets \ Scripts \ ItemWorld.cs (17,43): ошибка CS0120: ссылка на объект требуется для не c поле, метод или свойство 'ItemWorld.prefab'

Я пытался исследовать, но это моя последняя надежда xd Я буду рад любой помощи, спасибо, Gambizon

1 Ответ

0 голосов
/ 06 апреля 2020

Префабы являются объектами GameObject и должны быть созданы и объявлены как таковые. private transform prefab должно быть private GameObject prefab.

После того, как вы создали экземпляр объекта с помощью
GameObject prefabObject = Instantiate(prefab, position, Quaternion.identity);

Затем вы можете использовать Transform transform = prefabObject.transform;, чтобы получить компонент преобразования вашего вновь Созданный экземпляр prefab.

Кроме того, если вы сделаете ссылку prefab в скрипте publi c, и этот сценарий присоединен к GameObject, вы можете перетащить prefab в инспектор, чтобы вам не понадобился Resources.Load("Prefabs/pfItemWorld") as GameObject, так как ссылка уже будет там до времени выполнения.

...