Как переместить повернутый нож (RigidBody2D) по диагонали?

Я новичок в Unity и пока наслаждаюсь своим путешествием. Прямо сейчас я добился постоянного вращения ножа в диапазоне [-30;30] градусов. Однако после того, как пользователь нажмет любую клавишу, мой нож должен быстро двигаться в том направлении, в котором он сейчас находится.

Как я могу добиться следующего поведения? Пробовал addForce, менял скорость, но безрезультатно... Может быть, это и невозможно сделать?

введите здесь описание изображения

Здесь мой нож направлен влево, и я хочу, чтобы он просто двигался в этом направлении очень быстро. Никаких крутых эффектов :)

введите здесь описание изображения

Вот исходное положение ножа.

Вот исходный код:

public void HandleRotation()
{
    if (transform.rotation.z >= 0.3f)
    {
        right = false;
    }
    else if (transform.rotation.z <= -0.3f)
    {
        right = true;
    }

    if (right)
    {
        begin = begin + 0.05f;
    }
    else
    {
        begin = begin - 0.05f;
    }

    var tiltAroundZ = begin * tiltAngle;
    var target = Quaternion.Euler (0, 0, tiltAroundZ);
    transform.rotation = Quaternion.Slerp(transform.rotation, target, Time.deltaTime * smooth);

}

person Viktor Vostrikov    schedule 27.02.2020    source источник
comment
Если вы пытаетесь переместить его с помощью физического движка, первый вопрос: назначено ли ему RigidBody и отключено ли isKinematic?   -  person Eric    schedule 27.02.2020
comment
можно скриншот исходного состояния вашего ножа?   -  person Ankit    schedule 27.02.2020
comment
@Ankit, я обновил свой вопрос   -  person Viktor Vostrikov    schedule 27.02.2020
comment
@ViktorVostrikov Извините за мой поздний ответ. вы использовали transform.up для направления?   -  person Ankit    schedule 01.03.2020
comment
@Ankit да, я использовал преобразование, это сработало, но я столкнулся с проблемой, что коллизии там не срабатывали. В конце концов, я решил изменить скорость hardBody для движения.   -  person Viktor Vostrikov    schedule 01.03.2020
comment
@ViktorVostrikov, теперь все в порядке?   -  person Ankit    schedule 01.03.2020
comment
@Ankit да, без проблем :)   -  person Viktor Vostrikov    schedule 01.03.2020


Ответы (1)


Перевести(transform.forward())? Если вперед - неправильная ось, вы можете попробовать вверх или вправо.

Также должна быть версия метода Translate, которая включает параметр пробела, в этом случае вы должны использовать Space.Self вместо Space.World, который в настоящее время используется по умолчанию.

person Roy C    schedule 27.02.2020
comment
Мне нужно переместить его по диагонали. Я обновил вопрос своим исходным кодом для ротации. - person Viktor Vostrikov; 27.02.2020
comment
transform.forward переместит его вперед относительно текущего преобразования. Если он смотрит по диагонали, он пойдет по диагонали. - person Roy C; 28.02.2020
comment
Рой Си, теперь у меня другая проблема. Использование преобразования вместо скорости не заботится о столкновениях. Вот посмотрите на разницу между преобразованием и скоростью. gamedev.stackexchange.com/questions/118711/ Подскажите, пожалуйста, как это сделать со скоростью. - person Viktor Vostrikov; 29.02.2020