Это мое первое сообщение, поэтому, если я что-то сделаю неправильно, дайте мне знать об этом. Im делает в Unity 5.5 2D-игру с изображением сверху вниз. Для игры мне нужно, чтобы у некоторых автомобилей был простой сценарий AI, только для того, чтобы следовать по пути. Итак, я искал в Интернете что-то, что соответствует моим потребностям, и нашел (на мой взгляд) действительно хорошую реализацию. Здесь я даю u проект в GitHub, загруженный владельцем реализации. Я полагаю: https://github.com/mindcandy/lu-racerAI Car Unity неправильное вращение
Итак, в нескольких словах мы создаем Путь с пустыми GameObjects и соответствующими коллайдерами, у нас должен быть автомобиль (очевидно,) и настроены с помощью коллайдера и жесткого тела2d, и у нас есть три сценария, которые «делают магию». Для моего проекта я удаляю часть подсчета кругов, потому что моя игра не гонка. Ну, я создал все, и все работает отлично! За исключением одного: вращение автомобиля.
Я думаю, что это происходит потому, что учебная игра представляет собой вид сверху вниз, но автомобили идут слева направо, а в моей игре также сверху вниз, но автомобили идут от доверху. Таким образом, спрайты автомобилей в моем проекте находятся в режиме «сверху вниз» и смотрят вверх, а эскиз автомобиля проекта github - это сверху вниз, глядя вправо (я хотел загрузить изображения, но кажется, что я не могу сделать это из-за моей репутации, извините) ,
Определенно, ИИ работает очень хорошо, и автомобиль следовать без проблем путь, но с неправильным вращением, как это: aicar_rotation
Я пытался изменить положение вещей в AICarMovement сценариев, связанных с векторами и углами, но без везения, так что, если кто-то может посмотреть и дать мне руку, я буду благодарен. Если кто-то хочет получить более подробную информацию, чтобы понять проблему, дайте мне знать. Я пытаюсь загрузить больше вещей, таких как картинки или gifs, чтобы показать проблему, но я не могу сделать это из-за репутации.
Это часть кода в AICarMovement, что я думаю, что я должен изменить:
public class AICarMovement : MonoBehaviour {
public float acceleration = 0.5f;
public float braking = 0.3f;
public float steering = 4.0f;
private Rigidbody2D rigidb;
Vector3 target;
void Start() {
rigidb = GetComponent<Rigidbody2D>();
}
public void OnNextTrigger(TrackLapTrigger next){
target = Vector3.Lerp(next.transform.position - next.transform.right, next.transform.position + next.transform.right, Random.value);
}
void steerTowardsTarget() {
Vector2 towarNextTrigger = target - transform.position;
float targetRot = Vector2.Angle(Vector2.right, towarNextTrigger);
if(towarNextTrigger.y < 0.0f) {
targetRot = -targetRot;
}
float rot = Mathf.MoveTowardsAngle(transform.localEulerAngles.z, targetRot, steering);
transform.eulerAngles = new Vector3(0.0f, 0.0f, rot);
}
void FixedUpdate(){
steerTowardsTarget();
float velocity = rigidb.velocity.magnitude;
velocity += acceleration;
rigidb.velocity = transform.right * velocity;
rigidb.angularVelocity = 0.0f;
}
}
К сожалению о мой английский, это не мой родной язык.
Пожалуйста, попробуйте включить соответствующий код в свой вопрос - обратите внимание, что нам не нужен (или даже не нужен) весь проект, просто код, который обрабатывает перемещение/поворот автомобиля на основе ваших путевых точек. Этот сайт ожидает, что вопросы будут самодостаточными, что означает, что вся информация для решения вопроса должна быть в этом сообщении (т. Е. Не полагаться на ссылки за пределами сайта). – Serlite
Да, вы правы, я понял, что после загрузки сообщения. Я собираюсь отредактировать сообщение, включая соответствующий код. Спасибо. – ijromeo