Unity 我可以从可编写脚本的对象实例化游戏对象吗?

Unity can I instantiate a game object from a scriptable object?

我希望每把弓射出我在创建时在 SO 中设置的不同箭。我需要每把弓来射击 SO 中分配的箭头预制件。

WeaponConfig 有 [SerializeField] public GameObject projectile; 字段,我希望能够在其中换出不同的箭,这样每个新武器都可以发射不同的箭,我将在检查器中设置这些箭。

拍摄脚本:

    public void ShootingArrows()
    {
        var screenCam = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        Vector3 worldMousePos = screenCam;

        // Direction of mouse to player
        Vector2 direction = (Vector2)((worldMousePos - firePoint.position));
        direction.Normalize();

        // Creates the arrow locally
        GameObject arrow = (GameObject)Instantiate (
                                arrowPrefab,
                                firePoint.position + (Vector3)( direction * 0.5f),
                                firePoint.rotation);

        FindObjectOfType<AudioManager>().Play("BowShoot");
        
        // Adds velocity to the arrow
        arrow.GetComponent<Rigidbody2D>().velocity = direction * arrowForce;

        // Rotate arrow based on position from player to cursor
        angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 90f;
        arrow.transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.AngleAxis(angle, Vector3.forward), 1000 * Time.deltaTime);
    }   

在我的 Instantiate 中,我调用了 arrowPrefab,它被设置为脚本顶部的游戏对象。

我要将其更改为什么,以实例化预期的射弹?

如果我将其更改为下面的代码,则表示它没有对象引用。

     GameObject arrow = (GameObject)Instantiate (
                             WeaponConfig.projectile,
                             firePoint.position + (Vector3)( direction * 0.5f),
                             firePoint.rotation);

我在检查器中的射弹槽中填入了我想要发射的预期箭头。每个人都选择了不同的预制件。如何在 SO 中实例化分配的箭头?

好吧而不是到目前为止

public GameObject arrowPrefab;

你需要有一个

public WeaponConfig config:

字段,在此处引用您的 Bow 资产,然后执行

GameObject arrow = Instantiate (
                         config.projectile,
                         firePoint.position + (Vector3)(direction * 0.5f),
                         firePoint.rotation);