Реалистичное вращение клапанного колеса в Unity - PullRequest
1 голос
/ 15 мая 2019

Я работаю над реалистичным вращением трубы трубного клапана в Unity.это то, что у меня уже есть:

 [SerializeField] private float cur_HP;
private const float max_HP = 100;
private Vector3 PrevmousePos;
private bool SpaceIsPressed;
// Start is called before the first frame update
void Start()
{
    cur_HP = max_HP;
}

// Update is called once per frame
void Update()
{
    SpaceIsPressed = Input.GetKey(KeyCode.Space);
    Wheel();


}

void Wheel()
{
    Vector3 mouseDelta = Input.mousePosition - PrevmousePos;

    if (mouseDelta.x > 0 && SpaceIsPressed)
    {
        float amount = 0.01f;
        cur_HP -= mouseDelta.x * amount;
    } else if(mouseDelta.x < 0 && SpaceIsPressed)
    {
        float amount = 0.01f;
        cur_HP += mouseDelta.x * amount;
    }
    if (cur_HP <= 0)
    {
        cur_HP = 0;
        Debug.Log("You have unlocked");
    }
    if (cur_HP > 100)
    {
        cur_HP = 100;
    }
    transform.localRotation = Quaternion.Euler(0, 0, (720 / max_HP * cur_HP));
    PrevmousePos = Input.mousePosition;
}

Что я хочу прямо сейчас.просто как труба клапана в реальной жизни.если ты хочешь ослабить это.вам нужно приложить много силы, чтобы повернуть направо.и тогда становится легче вращаться, чем больше вы ослабляете его.наоборот, если хочешь его затянуть.поэтому с моим крошечным умом не могу думать ни о какой математике или коде в моей помощи.ребята, можете ли вы дать мне советы или подсказку, как это сделать?

Редактировать: вот gif о том, что у меня есть сейчас, я использую пробел и правый поворот моей мыши, чтобы вращать колесо https://gyazo.com/004b2f8c4424476c796ae42ad28dacce

1 Ответ

0 голосов
/ 15 мая 2019

Таким образом, у вас есть cur_HP, который должен установить, насколько клапан поворачивается, и он устанавливается с помощью mouseDelta.x.

Теперь вы хотите, чтобы следующая модификация (mouseDelta.x) была меньше, чем ближе cur_HP к max_HP:

cur_HP += (mouseDelta.x * max_HP/cur_HP) * amount;

Это сделает линейное замедление колеса ближе к концу.

Возможно, вам потребуется настроить переменную amount, поскольку колесо будет вращаться в 100 раз быстрее, когда вращается на 1 градус.

Убедитесь, что обрабатываете, когда cur_HP равен 0, поскольку деление на ноль крайне недопустимо.


Пример, то же движение X, разная плотность:

Герметичность 20%

  • cur_HP = 20
  • max_HP = 100
  • mouseDelta.x = 1
  • сумма = 0.1f

-> новый cur_HP = 20,5

Герметичность: 60%

  • cur_HP = 60
  • max_HP = 100
  • mouseDelta.x = 1
  • сумма = 0.1f

-> новый cur_HP = 60.16666

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...