首页 > 解决方案 > 物品掉落系统 - 我怎样才能在这里正确使用预制件?

问题描述

我的代码很简单,但我对统一很陌生......我试图做到这一点,这样当我从库存中拖出时我可以把我的物品放在地上,但不能完全做到这一点,有一些一致的错误。我有一个预制件(今天才知道),我试图改变它的精灵渲染器并生成它。这是我的代码:

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;
    }
}

我的问题是我无法加载我的预制件并在实例化中使用它而不会出现很多错误......我的代码有什么问题?以下是错误:

(1) Assets\Scripts\ItemWorld.cs(12,18): 错误 CS0029: 无法将类型“UnityEngine.GameObject”隐式转换为“UnityEngine.Transform”(是的,我知道这意味着什么,但我如何使用预制件没有变换)

(2)Assets\Scripts\ItemWorld.cs(17,43): error CS0120: an object reference is required for the non-static field, method, or property 'ItemWorld.prefab'

我曾尝试研究,但这是我最后的希望 xd 很高兴得到任何帮助,谢谢,Gambizon

标签: visual-studiounity3dvisual-studio-2017

解决方案


Prefabs 是 GameObjects 并且需要被实例化和声明。private transform prefab应该是private GameObject prefab

实例化对象后
GameObject prefabObject = Instantiate(prefab, position, Quaternion.identity);

然后,您可以使用Transform transform = prefabObject.transform;来获取新实例化的预制件的转换组件。

此外,如果您将脚本中的预制件引用公开,并将此脚本附加到游戏对象,您可以将预制件拖到检查器中,这样您就不需要Resources.Load("Prefabs/pfItemWorld") as GameObject了,因为在运行之前引用就已经存在了。


推荐阅读