gpt4 book ai didi

unity-game-engine - 如何在Unity中引用实例化对象?

转载 作者:行者123 更新时间:2023-12-02 02:54:12 25 4
gpt4 key购买 nike

我有一个武器,我想实例化一个对象(在本例中是子弹),然后等到该子弹击中一个对象后,才允许该武器实例化另一个对象。

我目前正在通过在武器脚本上添加以下内容来做到这一点:

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() 函数,当场景中有一种武器时,该函数就可以工作,但是一旦场景中一次有多个武器脚本,您就开始难以确定谁是谁。

有没有办法让 WeaponScript 在实例化对象时将自身设置为变量,如下所示:

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 的帮助!

最佳答案

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

GameObject projectileIntantiated = Instantiate(projectilePrefab, firePoint.transform.position, transform.rotation);
projectileIntantiated.GetComponent<projectile>().parentWeapon = this.gameobject;

关于unity-game-engine - 如何在Unity中引用实例化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61433330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com