@Gigabait

Реализация связи скриптов?

Сразу скажу что я новичок в юнити.
И мой вопрос состоит в том что, как я могу реализовать связь скриптов таким образом, чтобы они были универсальными, т.е чтобы они работали во всех моих проектах, а не зависели от одного проекта.
Я не хочу в один объект пихать дохера скриптов. Например как "movement, attack и прочее прочее в объект Player".
Я не хочу использовать "GetComponent" и ему подобные.
По этому я нарисовал примерную схему моего проекта как я хотел бы чтоб он "Общался"
YBsZa4n.png

Но я не знаю как это реализовать.

Вот одна из проблем, с которой я недавно столкнулся.
У меня есть класс "PlayerClass". Скрипт "PlayerLogic" я повесил на PlayerObject, потому что я больше не знаю как это реализовать по другому. В классе "PlayerClass" есть метод "Move" который я вызываю в "PlayerLogic" Update, который должен перемещать игрока. Но он не перемещает, так как он не знает кого перемещать. Проблема в том что я не знаю как мне получить объект на котором весит "PlayerLogic" из "PlayerClass"

public class PlayerLogic : MonoBehaviour
{
    private PlayerObject player;
    
    void Start()
    {
        player.NewPlayer("BOT");
    }

    void Update()
    {
       player.Move();
    }

}


public class PlayerObject : MonoBehaviour
{
    private int health;
    private string name;
    private int speed = 2;

    public void NewPlayer(string _name)
    {
        name = _name;
    }

    public void Move()
    {
        // Move with Transform
    }
}
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Вообще-то компонентная модель юнити как раз и рассчитана на то, что на персонаже висит конкретный компонент KickWeapon или BlasterWeapon, а не MyBigAllWeaponTypeOfMyWorldClass. И именно GetComponent<BaseWeapon>().Attack() запускает всё шоу после кнопки Fire.

Ну и вашем случае проблема в том, что Player взялся из неоткуда, а не был следствием PlayerLogic.SpawnNewPlayer(), тогда бы он и имел ссылку на игрока. На худой конец Object.FindObjectOfType
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы