Катапульта (3d проект)

Программирование на Юнити.

Катапульта (3d проект)

Сообщение Goordul 23 окт 2019, 03:08

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

По сути, нужно задать вращение двух элементов модели, оба по одной оси (Х).
Во время зажатия клавиши, ворот для взведения рычага в боевое положение вращается в одну сторону, бросающий рычаг с ковшом постепенно опускается вниз. Если клавишу отпустить, бросающий рычаг просто замирает на месте, а ворот перестаёт вращаться. Если опять зажать, он продолжает опускаться до определённого градуса, нижу которого уже не опускается.
При нажатии другой клавиши, бросательный рычаг резко возвращается в вертикальное положение (из любого положения где он замер), а ворот вращается в обратном направлении, занимая изначальное положение. Иными словами, онагр взводится и производит выстрел.
У меня получилось заскриптить взведение рычага и одновременное вращение ворота, так же получилось сделать так, чтобы обе детали замирали при отжатии клавиши.
Не получается: Сделать так, чтобы при повторном нажатии рычаг и ворот продолжали вращаться с той позиции, в которой застыли. А так же сделать так, чтобы при нажатии другой клавиши рычаг и ворот быстро возвращались в исходное положение из любой позиции в которой застыли.
Очень надеюсь что здесь мне смогут подсказать, каким образом реализовать эти действия. Заранее благодарен

Изображение
Изображение
Изображение
Goordul
UNец
 
Сообщения: 4
Зарегистрирован: 23 окт 2019, 02:10

Re: Катапульта (3d проект)

Сообщение Xtir 23 окт 2019, 10:09

Не видно что у тебя там дальше в Vector3.Lerp
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

Re: Катапульта (3d проект)

Сообщение Goordul 23 окт 2019, 13:26

Xtir писал(а):Не видно что у тебя там дальше в Vector3.Lerp

Странно, у меня всё видно. С телефона смотришь?

Вот код полностью:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CatapultActions : MonoBehaviour {

public float Tension;
private bool _pressed;

public Transform LadleTransform;
public Transform RotatorTransform;

public Vector3 LadleNearLocalRotation;
public Vector3 LadleFarLocalRotation;

public Vector3 RotatorNearLocalRotation;
public Vector3 RotatorFarLocalRotation;

void Start () {
LadleNearLocalRotation = LadleTransform.localEulerAngles;
RotatorNearLocalRotation = RotatorTransform.localEulerAngles;
}


void Update () {
if (Input.GetButtonDown ("Load")) {
_pressed = true;
}
if (Input.GetButtonUp ("Load")) {
_pressed = false;
Tension = 0;

}
if (_pressed) {
if (Tension < 1f) {
Tension += Time.deltaTime / 7;
}
LadleTransform.localEulerAngles = Vector3.Lerp (LadleNearLocalRotation, LadleFarLocalRotation, Tension);
RotatorTransform.localEulerAngles = Vector3.Lerp (LadleNearLocalRotation, LadleFarLocalRotation, Tension);
}
}
}
Goordul
UNец
 
Сообщения: 4
Зарегистрирован: 23 окт 2019, 02:10

Re: Катапульта (3d проект)

Сообщение 1max1 23 окт 2019, 13:39

Сделать так, чтобы при повторном нажатии рычаг и ворот продолжали вращаться с той позиции, в которой застыли

Ну это и так должно выполнятся судя по коду, просто убери обнуление Tension.
А так же сделать так, чтобы при нажатии другой клавиши рычаг и ворот быстро возвращались в исходное положение из любой позиции в которой застыли.

Синтаксис:
Используется csharp
if (buttonDown)
{
    Tension = 0;
    LadleTransform.localEulerAngles = LadleNearLocalRotation;
    RotatorTransform.localEulerAngles = LadleNearLocalRotation;
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Катапульта (3d проект)

Сообщение Goordul 23 окт 2019, 14:21

1max1 писал(а):
Сделать так, чтобы при повторном нажатии рычаг и ворот продолжали вращаться с той позиции, в которой застыли

Ну это и так должно выполнятся судя по коду, просто убери обнуление Tension.
А так же сделать так, чтобы при нажатии другой клавиши рычаг и ворот быстро возвращались в исходное положение из любой позиции в которой застыли.

Синтаксис:
Используется csharp
if (buttonDown)
{
    Tension = 0;
    LadleTransform.localEulerAngles = LadleNearLocalRotation;
    RotatorTransform.localEulerAngles = LadleNearLocalRotation;
}


Возможно я не всё правильно понял, но просто убрав Tension = 0, был достигнут желаемый эффект по части взведения рычага, огромное спасибо.
А как по нажатию клавиши быстро реверсировать рычаги в их начальное положение? (это наверное элементарно, но я не знаком почти ни с какими командами :( )
Goordul
UNец
 
Сообщения: 4
Зарегистрирован: 23 окт 2019, 02:10

Re: Катапульта (3d проект)

Сообщение Niker 23 окт 2019, 14:35

Goordul писал(а):Возможно я не всё правильно понял, но просто убрав Tension = 0, был достигнут желаемый эффект по части взведения рычага, огромное спасибо.
А как по нажатию клавиши быстро реверсировать рычаги в их начальное положение? (это наверное элементарно, но я не знаком почти ни с какими командами :( )

Просто берешь начальные позиции и выставляешь, как бы обнуляешь все.
Niker
UNIт
 
Сообщения: 58
Зарегистрирован: 27 сен 2019, 12:03

Re: Катапульта (3d проект)

Сообщение Goordul 23 окт 2019, 20:56

Niker писал(а):
Goordul писал(а):Возможно я не всё правильно понял, но просто убрав Tension = 0, был достигнут желаемый эффект по части взведения рычага, огромное спасибо.
А как по нажатию клавиши быстро реверсировать рычаги в их начальное положение? (это наверное элементарно, но я не знаком почти ни с какими командами :( )

Просто берешь начальные позиции и выставляешь, как бы обнуляешь все.


Знать бы как это делается) Я ещё толком не знаю где нужно ставить скобки и запятые, поэтому не могу понять с помощью каких команд и в каком порядке плавно вернуть рычаг и ворот в исходное положение
Goordul
UNец
 
Сообщения: 4
Зарегистрирован: 23 окт 2019, 02:10


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: GoGo.Ru [Bot] и гости: 8