如何在 Unity 中引用实例化对象?
How to reference an Instantiated object in Unity?
我有一个武器,我想实例化一个对象(在本例中是一颗子弹),然后等到子弹击中一个对象,然后才允许武器实例化另一个对象。
我目前正在通过在武器脚本中添加这个来做到这一点:
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
是什么,因此它无法在 weaponScript
为真。
我可以使用 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;
我有一个武器,我想实例化一个对象(在本例中是一颗子弹),然后等到子弹击中一个对象,然后才允许武器实例化另一个对象。
我目前正在通过在武器脚本中添加这个来做到这一点:
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
是什么,因此它无法在 weaponScript
为真。
我可以使用 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;