0

我希望每把弓都射出我在创建时在 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);
    }   

在我的实例化中,我arrowPrefab将其设置为脚本顶部的游戏对象。

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

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

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

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

在此处输入图像描述

4

1 回答 1

1

好吧,而不是到目前为止

public GameObject arrowPrefab;

你需要有一个

public WeaponConfig config:

字段,在那里引用您的Bow资产,然后执行

GameObject arrow = Instantiate (
                         config.projectile,
                         firePoint.position + (Vector3)(direction * 0.5f),
                         firePoint.rotation);
于 2022-02-15T16:26:20.143 回答