Плавное изменение вектора скорости кнопками
Ребятки, привет! При создании объекта встретился с проблемой.
На первом изображении объект движется, если ему задать вектор движения (Vector3.up). Он постоянен, до отключения, скажем так, двигателя. Пока он движется, его нужно крутить в разные стороны. НО! Как показано на втором изображении, если его крутить и оставить направление вектора движения (Vector3.up), он повернется, но будет двигаться также вверх. Как сделать, чтобы он продолжал двигаться по направлению вперед относительно спрайта, как показано на рисунке три (Если нажимать клавишу "Право", объект плавно меняет направление движения вправо (И крутиться вправо должен по всей оси.
Ответы (1 шт):
Прошли почти сутки мучений и я все-таки нашел решение! Да, это очень костыльный код, наверняка можно сделать лучше, но это - мой первый проект.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour {
[Header("Set in Inspector")]
public float speed = 1;
public float rotSpeed = 20;
[Header("Set Dynamically")]
public int sailPos = 0; // Положение паруса корабля
public Rigidbody rigid; // Хранит компонент Rigidbody игрока
public GameObject nose; // Хранит в себе дочерний объект Nose
public int rotCondition = 0; // Условие изменения напрвления влево или вправо
void Awake() {
rigid = GetComponent<Rigidbody>();
nose = GameObject.Find("Nose");
}
void FixedUpdate() {
if (sailPos == 1) {
rigid.velocity = speed * -(transform.position-nose.transform.position);
} else {
rigid.velocity = Vector3.zero;
}
transform.Rotate( 0, 0, rotCondition*rotSpeed*Time.deltaTime);
}
public void OnUpButtonDown () {
sailPos = 1;
}
public void OnDownButtonDown () {
sailPos = 0;
}
public void OnLeftButtonDown () {
rotCondition = 1;
}
public void OnLeftButtonUp () {
rotCondition = 0;
}
public void OnRightButtonDown () {
rotCondition = -1;
}
public void OnRightButtonUp () {
rotCondition = 0;
}
}
Так вот, чтобы было понятней, наверное, и мне самому тоже. Я добавил объект Nose, который находится на носу моего корабля. Когда я его поворачиваю, координаты в мировом пространстве этого объекта изменяются. Далее, я использую эти координаты, чтобы получить вектор направления корабля непосредственно при указании ему направления движения - с помощью разницы координат корабля и его носа получим вектор движения в нужную сторону! Если теперь немного остыть и еще подумать, попробую сформулировать это как-то более понятно )
