1

我正在开发“将球射入垃圾箱”游戏。我试图获取一个预制对象(通过检查器)然后实例化它,但是当检查器没有显示输入预制游戏对象的预制选项时偶然发现了这个问题,即使这段代码:

[System.Serializable]
public class Obj
{
    public GameObject prefab;
}

应该这样做。

完整代码:

public class MouseLook : MonoBehaviour 
{
   [System.Serializable]
    public class Obj
    {
        public GameObject prefab; // Get Prefab from Inspector
    }
    
    void Update() 
    {
        if (Input.GetMouseButtonDown(0)) 
        {
            Obj obj = new Obj();

            Instantiate(obj.prefab, playerBody); // playerbody is a Transform
        }
    }
}

如果有人有解决此问题的方法,请告诉我。
这将非常有帮助:)

4

1 回答 1

1

我很确定这不是Full code.. 否则它甚至不会编译;)


就目前而言

您定义了一个类,是的,但是我没有看到您的类中的任何字段实际上使用了您的类型!

它应该是例如

public class MouseLook : MonoBehaviour 
{
    [System.Serializable]
    public class Obj
    {
        public GameObject prefab;
    }

    public Obj obj;
    // Or also
    //[SerializeField] private Obj obj;

    // Wherever you get this from
    Transform playerBody;
    
    void Update() 
    {
        if (Input.GetMouseButtonDown(0)) 
        {
            Instantiate(obj.prefab, playerBody);
        }
    }
}

特别注意,如果你这样做

Obj obj = new Obj();

在这个刚刚创建Obj的实例中prefab,当然是未分配的。


不过,我的问题是:这真的是你的Obj课吗?因为在这种情况下为什么不简单地拥有

public class MouseLook : MonoBehaviour 
{
    public GameObject prefab;
    // Or also
    //[SerializeField] private GameObject prefab;

    // Wherever you get this from
    Transform playerBody;
    
    void Update() 
    {
        if (Input.GetMouseButtonDown(0)) 
        {
            Instantiate(prefab, playerBody);
        }
    }
}
于 2021-06-20T03:30:33.670 回答