【发布时间】:2020-04-26 09:49:37
【问题描述】:
我有一个武器,我想实例化一个对象(在本例中是子弹),然后等到子弹击中一个对象后,才允许该武器实例化另一个对象。
我目前正在通过在武器脚本上执行此操作:
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 上的 launchable 变量设置为 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;
}
}
感谢佩里迪斯的帮助!
【问题讨论】:
标签: unity3d instantiation