如何在Unity中引用实例化的对象?

问题描述 投票:1回答:1

我有一个要实例化对象的武器(在这种情况下为子弹),然后等待该子弹击中一个对象,然后才允许该武器实例化另一个对象。

我目前正在通过在武器脚本上放置此武器来进行此操作:

public class weaponScript : MonoBehaviour
{
        public gameobject projectilePrefab;
        public bool launchable;

        void Update{
        if(launchable){
             Instantiate(projectilePrefab, firePoint.transform.position, transform.rotation);
             launchable = false;
        }
    }

以及此项目符号脚本上的:

public class projectile : MonoBehaviour
{
    void OnCollisionEnter2D(Collision2D other){
        weaponScript.launchable = true;
    }
}

这将完全满足我的需求,但是这不起作用,因为弹丸没有对weaponScript的定义,因此无法将launchable上的weaponScript变量设置为true。

我可以使用FindObjectOdType()函数,当您在场景中拥有一种武器时有效,但是一旦您一次在场景中拥有一个以上的武器脚本,您就开始难以确定谁是谁。

[武器脚本是否可以在实例化对象时将自身设置为变量,因此就像:

public class weaponScript : MonoBehaviour
{
        public gameobject projectilePrefab;
        public bool launchable;

        void Update{
        if(launchable){
             Instantiate(projectilePrefab, firePoint.transform.position, transform.rotation);
             [InstanciatedObjectHere].parentWeapon = this.gameobject;
             launchable = false;
        }
    }

那样,所有弹丸必须做的是:

public class projectile : MonoBehaviour
{
    void OnCollisionEnter2D(Collision2D other){
        parentWeapon.launchable = true;
    }
}

解决方案:

[我知道Pastebin不会永远保留该脚本,因此我将在此处将答案作为编辑:(此外,它使其他可能偶然发现此问题的人更容易阅读)]

[我听了Peridis的回答,但没有立即起作用,所以我最终对其进行了调整,并提出了以下建议:

public class weaponScript : MonoBehaviour
{
        public gameobject projectilePrefab;
        public bool launchable;
        private projectile projectileScript;

        void Update{
        if(launchable){
            GameObject projectileIntantiated = Instantiate(projectilePrefab, firePoint.transform.position, transform.rotation);
            projectileScript = projectileIntantiated.GetComponent<projectile>();
            projectileScript.parentWeapon = this.gameObject.GetComponent<weaponScript>();
            launchable = false;
        }
    }




public class projectile : MonoBehaviour
{
    public weaponScript parentWeapon;

    void OnCollisionEnter2D(Collision2D other){
        parentWeapon.launchable = true;
    }
}

感谢您对Peridis的帮助!

unity3d instantiation
1个回答
3
投票

实例化弹丸时可以创建GameObject类型的变量

GameObject projectileIntantiated = Instantiate(projectilePrefab, firePoint.transform.position, transform.rotation);
projectileIntantiated.GetComponent<projectile>().parentWeapon = this.gameobject;
© www.soinside.com 2019 - 2024. All rights reserved.