MicroProger
@MicroProger
Работает - не трогай

Как правильно сделать приседание на Ctrl?

Всем привет! Код на приседание работает через жопу. Вот код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SitDown : MonoBehaviour
{
    public GameObject cameraGood;
    public float speed = 5;
    bool negr = false;
    int a = 1;
    
    
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
      
    }

    void FixedUpdate()
    {
        if (Input.GetKeyDown( KeyCode.LeftControl))
        {
            if (negr == false)
            {
                print("ctrlDown");
            
            
                speed = 10;
                
                cameraGood.transform.Translate(Vector3.down * Time.deltaTime * speed );
                negr = true;
                FirstPersonMovement.speed = 2; // статик для кода, который
                FirstPersonMovement.runSpeed = 2; // изменяет скорость передвижения
            }
            else
            {
                print("ctrlUp");
            FirstPersonMovement.speed = 5;
            FirstPersonMovement.runSpeed = 9;
            
                
                
                speed = -10;
                cameraGood.transform.Translate(Vector3.down * Time.deltaTime * speed );
                negr = false;
            }
            
            
        }  
        
    }
    
    
    
}
  • Вопрос задан
  • 707 просмотров
Пригласить эксперта
Ответы на вопрос 1
MicroProger
@MicroProger Автор вопроса
Работает - не трогай
Проблема была в различии Update и FixedUpdate

(Длина кадра у этих двух различается) FixedUpdate выполняется после отрисовки каждого фиксированного кадра. Отличие от update заключается в том, что FixedUpdate выполняется в визуализированном кадре. Если эффективность визуализации низкая, количество вызовов FixedUpdate уменьшится. FixedUpdate больше подходит для расчета физического движка, потому что он связан с рендерингом каждого кадра. Обновление больше подходит для контроля.


Мне помогли люди из комментариев выше

Если кому надо, вот код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SitDown : MonoBehaviour
{
    public GameObject cameraGood;
    public float speed = 5;
    bool negr = false;

    void Update()
    {
      SitDownPls();
    }
    
    void SitDownPls()
    {
        if (Input.GetKeyDown( KeyCode.LeftControl))
        {
            if (negr == false)
            {
                print("ctrlDown");
                speed = 10;
                cameraGood.transform.Translate(Vector3.down * Time.deltaTime * speed );
                negr = true;
                FirstPersonMovement.speed = 2;
                FirstPersonMovement.runSpeed = 2;
            }
            else
            {
                print("ctrlUp");
            FirstPersonMovement.speed = 5;
            FirstPersonMovement.runSpeed = 9;
                speed = -10;
                cameraGood.transform.Translate(Vector3.down * Time.deltaTime * speed );
                negr = false;
            }
            
            
        }  
    }
    
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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