Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как сделать толчок относительно самого объекта в Unity 3D.

Коля Колесников Знаток (331), на голосовании 7 месяцев назад
Я делаю игру в Unity 3D, новичок. Хочу сделать толчок объекта, но локально, относительно объекта. То есть , например, толчок - вперёд будет туда куда смотрит объект. Его вращение происходит по физике и от столкновений. В интернете искал, но не смог найти решение. Буду рад если поможете. Вот код:
 public float MaxSpeed; // максимальная скорость 

public WheelCollider WheelColliderPL;
public WheelCollider WheelColliderPP;
public WheelCollider WheelColliderZL;
public WheelCollider WheelColliderZP;

public Transform PLTransform;
public Transform PPTransform;
public Transform ZLTransform;
public Transform ZPTransform;

public GameObject PPL;
public GameObject PPP;

Vector3 TPL, TPP; // вектор поворота
private void Start ()
{
rb = GetComponent();
}

void Update ()
{
if (Input.GetKeyUp(KeyCode.Space))
{
count += 1;
if (count == 1)
{
rb.AddForce(new Vector3(0, 1, 0) * strike);
count_2 = 0;
}
Debug.Log(count);
if (count == 2)
{
if (Input.GetKey(KeyCode.W))
rb.AddForce(Vector3.forward * strike);
if (Input.GetKey(KeyCode.A))
rb.AddForce(Vector3.left * strike);
if (Input.GetKey(KeyCode.S))
rb.AddForce(Vector3.back * strike);
if (Input.GetKey(KeyCode.D))
rb.AddForce(Vector3.right * strike);
else
rb.AddForce(new Vector3(0, 1, 0) * strike);
Debug.Log(count);
}
}

if (GroundTrigger.ground == 1 && count_2 == 0)
{
count = 0;
count_2 = 1;

}
}
Меня интересует вся часть с нажатием на кнопку space. Там я пытался сделать толчок с помощью направлений, но он всё равно происходит по глобальным осям, а не моего объекта. Объект - рабочая машина с физикой.
Дополнен 8 месяцев назад
Решено
Голосование за лучший ответ
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (157223) 8 месяцев назад
Чтобы сделать толчок относительно объекта, используй `transform.forward`, `transform.right` и т.д. для направления в локальных координатах. Вот как это можно сделать:
 
if (Input.GetKey(KeyCode.W))
rb.AddForce(transform.forward * strike);
if (Input.GetKey(KeyCode.A))
rb.AddForce(-transform.right * strike); // Используй - для обратного направления
if (Input.GetKey(KeyCode.S))
rb.AddForce(-transform.forward * strike);
if (Input.GetKey(KeyCode.D))
rb.AddForce(transform.right * strike);


Это участок кода нужно вставить вместо твоего текущего кода обработки нажатий `W`, `A`, `S`, `D` после проверки на `count == 2`. Таким образом, толчок будет применяться в направлении, куда смотрит объект, а не по глобальным осям.
Коля КолесниковЗнаток (331) 8 месяцев назад
Cпасибо большое, помогло! :)
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (157223) Коля Колесников, ?
Похожие вопросы