У меня есть оружие, для которого я хочу создать экземпляр объекта (в данном случае пуля), затем подождите, пока эта пуля не попадет в объект, прежде чем оружию позволят создать экземпляр другого объекта.
В настоящее время я нахожусь сделать это с помощью сценария с оружием:
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;
}
}
Решение:
I знать Pasteb In не сохранит сценарий навсегда, поэтому я собираюсь поместить ответ здесь в качестве правки: (плюс для некоторых других, кто может наткнуться на это, будет легче читать)
Я последовал ответу Перидиса , но это не сработало сразу, так что в итоге я настроил его и придумал:
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;
}
}
Спасибо за помощь, Перидис!