Понедельник, 25 Ноября 2024, 10:28

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как двигать предмет при определённых условиях
RobitIДата: Суббота, 01 Апреля 2023, 00:50 | Сообщение # 1
был не раз
Сейчас нет на сайте
Я хочу сделать так, чтобы мой персонаж мог двигать объекты при определённых условиях, иначе объект, который надо двигать не будет сдвинут с места, но у меня не получается правильно написать код.
Код
public float pushForce = 10f; // сила толчка
        private bool canPush = false; // можно ли толкать объект

        private void OnCollisionStay(Collision collision)
        {
            if (collision.gameObject.CompareTag("Player") && PlayerTransform.FormEarth.activeInHierarchy)
            {
                canPush = true;
            }
        }

        private void OnCollisionExit(Collision collision)
        {
            if (collision.gameObject.CompareTag("Player") && PlayerTransform.FormEarth.activeInHierarchy)
            {
                canPush = false;
            }
        }

        private void FixedUpdate()
        {
            if (canPush)
            {
                GetComponent<Rigidbody>().AddForce(transform.forward * pushForce, ForceMode.Impulse);
            }
        }


Сообщение отредактировал RobitI - Суббота, 01 Апреля 2023, 00:51
falcowareДата: Суббота, 01 Апреля 2023, 09:04 | Сообщение # 2
старожил
Сейчас нет на сайте
RobitI, OnCollisionEnter смотрели функцию?
RobitIДата: Суббота, 01 Апреля 2023, 15:27 | Сообщение # 3
был не раз
Сейчас нет на сайте
Цитата falcoware ()
RobitI, OnCollisionEnter смотрели функцию?
Да, но всё равно объект поддаётся толчку игнорируя при этом условия


Сообщение отредактировал RobitI - Суббота, 01 Апреля 2023, 15:28
k0feДата: Вторник, 04 Апреля 2023, 08:50 | Сообщение # 4
BRONX
Сейчас нет на сайте
Советую закэшировать ригидбоди, чтобы избежать GetComponent в апдейте. Плюс поправить логику в OnStay, OnExit (если это не по задумке офк)

Код
public float pushForce = 10f; // сила толчка
private bool canPush = false; // можно ли толкать объект

private Rigidbody rigidbody;

private void Awake(){
    rigidbody = GetComponent<Rigidbody>();
}

private void OnCollisionStay(Collision collision)
{
    if (collision.gameObject.CompareTag("Player"))
    {
        canPush = PlayerTransform.FormEarth.activeInHierarchy;
    }
}

private void OnCollisionExit(Collision collision)
{
    if (collision.gameObject.CompareTag("Player"))
    {
        canPush = false;
    }
}

private void FixedUpdate()
{
    if (canPush)
    {
        rigidbody.AddForce(transform.forward * pushForce, ForceMode.Impulse);
    }
}


Ну и дебагером/дебаглогом посмотреть какие значения приходят в методы с OnStay, OnExit.
Если вообще метод коллизии не срабатывает, то глянь табличку в доке в самом конце, возможно не соблюдены условия для самих коллайдеров


мой стрим, который я редко включаю, но зато на нём я делаю игры
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг