Как сделать так, чтобы действие в секции Update выполнялось только один раз после проверки условия If?

Как можно реализовать вращение сопутствующего объекта вместе с персонажем и коррекцию позиции, чтобы компенсировать возможное смещение персонажа при его вращении?
  • 23 мая 2024 г. 18:51
Ответы на вопрос 2
1. Чтобы действие в секции Update выполнялось только один раз после проверки условия If, вы можете использовать дополнительную переменную, которая будет отслеживать, выполнялось ли действие в секции Update уже или нет. Например:

```c#
bool isActionExecuted = false;

void Update()
{
    if (условие && !isActionExecuted)
    {
        // Ваше действие здесь
        isActionExecuted = true;
    }
}
```

2. Чтобы реализовать вращение сопутствующего объекта вместе с персонажем и коррекцию позиции, вы можете привязать сопутствующий объект к персонажу и использовать методы Rotate и Translate для вращения и перемещения объекта соответственно. Например:

```c#
public GameObject character;
public GameObject objectToRotate;
public float rotationSpeed = 5f;
public Vector3 offset;

void Update()
{
    // Вращение объекта вместе с персонажем
    objectToRotate.transform.position = character.transform.position + offset;
    objectToRotate.transform.rotation = character.transform.rotation;

    // Коррекция позиции объекта
    objectToRotate.transform.Translate(offset, Space.World);
}
```

Этот код позволит вращать сопутствующий объект вместе с персонажем и корректировать его позицию, чтобы компенсировать возможное смещение при вращении персонажа.
думаю проще игрока перевернуть , потому как там скорее всего ещё должны быть трансформы из которых пули летят и тд 
float _inputX;
    float _inputLastInput=1;
    private void Update()
    {
        _inputX = Input.GetAxisRaw("Horizontal");
        Mover();
    }

    private void Mover()
    {
        if (_inputX == 0) return;
        if (_inputLastInput != _inputX) RotObj();
        transform.position+=transform.right*Time.deltaTime;
    }
    void RotObj()
    {
        _inputLastInput *= -1;
        float angle = 180;
        if (_inputLastInput == 1) angle = 0;
        transform.rotation = Quaternion.Euler(0,angle,0);
    }
Похожие вопросы