Страница 1 из 1

Как перенести значение из скрипта префаба в другой?

СообщениеДобавлено: 09 апр 2021, 11:22
DarkLight Games
Привет
В общем, у меня возникла такая проблема: у меня есть скрипт босс и скрипт его пули. Оба скрипта находятся в двух разных префабах. Мне из скрипта босса нужно передать вектор пуле. Подскажите пожалуйста, как это сделать?

Re: Как перенести значение из скрипта префаба в другой?

СообщениеДобавлено: 09 апр 2021, 12:00
TeslaGan
DarkLight Games писал(а):Привет
В общем, у меня возникла такая проблема: у меня есть скрипт босс и скрипт его пули. Оба скрипта находятся в двух разных префабах. Мне из скрипта босса нужно передать вектор пуле. Подскажите пожалуйста, как это сделать?

самый простой способ, который мне нравится. предположим скрипт движения пули называется MoveBullet. а скорость хранится в float Speed(лишь пример, чтобы уловить идею) тогда
Синтаксис:
Используется csharp
public MoveBullet BulletPrefub;

//когда нам надо заспаунить пулю
Instatiate(BulletPrefub).Speed = 500;
 

если нам надо сделать еще что-то(например задать время уничтожения пули). можно Instatiate присвоить переменной
Синтаксис:
Используется csharp
MoveBullet mb = Instatiate(BulletPrefub);
mb.Speed = 500;
mb.gameObject.Destroy(gameObject,500); //сейчас не вспомню как правильно дестрой вызывать
 




чуть менее красиво будет с классическим вариантом
Синтаксис:
Используется csharp
public GameObject BulletPrefub;

//когда спауним пулю
GameObject go = Instatiate(BulletPrefub);
go.getComponent<MoveBullet>().Speed = 500;


плюс первого варианта - мы не ищем компоненты через тяжелые getComponent, а сразу передаем их через префаб(при перетаскивании префаба, мы сразу даем ссылку на компонент MoveBullet)

Re: Как перенести значение из скрипта префаба в другой?

СообщениеДобавлено: 09 апр 2021, 12:24
DarkLight Games
Это не совсем то что мне надо. Мне надо в пуле добиться чего-то типа этого
Синтаксис:
  1. RigidBody2D rb; 
  2. rb.velocity = VectorVariableInBossScript // последняя переменная - Vector3 в скрипте босса 

Мне нужно добиться, чтобы босс мог менять направление полёта пули

Re: Как перенести значение из скрипта префаба в другой?

СообщениеДобавлено: 09 апр 2021, 12:38
TeslaGan
DarkLight Games писал(а):Это не совсем то что мне надо. Мне надо в пуле добиться чего-то типа этого
Синтаксис:
  1. RigidBody2D rb; 
  2. rb.velocity = VectorVariableInBossScript // последняя переменная - Vector3 в скрипте босса 

Мне нужно добиться, чтобы босс мог менять направление полёта пули

вместо класса MoveBullet и переменной speed у вас может быть все что угодно. вы сохраняете префаб в боссе под типом скрипта, в том числе и RigidBody2D(это тоже если что, просто скрипт). если далее надо управлять пулей, сохраните ее. Instatiate возвращает ссылку на объект. например создаем поле List<RigidBody2D> ListBullet;
и при инстациировании добавляем пулю в это поле ListBullet.Add(Instatiate(BulletPrefub));
если и это не понятно, я бы посоветовал изучить вам основы c# и в частности разобраться с понятиями глобальной и локальной переменных, зачем они нужны и как их использовать.

Re: Как перенести значение из скрипта префаба в другой?

СообщениеДобавлено: 09 апр 2021, 12:49
DarkLight Games
Веское замечание :)) . Пойду читать документацию, что - ли.