2017-01-23 2 views
0

Это мое первое сообщение, поэтому, если я что-то сделаю неправильно, дайте мне знать об этом. 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; 
} 

}

К сожалению о мой английский, это не мой родной язык.

+0

Пожалуйста, попробуйте включить соответствующий код в свой вопрос - обратите внимание, что нам не нужен (или даже не нужен) весь проект, просто код, который обрабатывает перемещение/поворот автомобиля на основе ваших путевых точек. Этот сайт ожидает, что вопросы будут самодостаточными, что означает, что вся информация для решения вопроса должна быть в этом сообщении (т. Е. Не полагаться на ссылки за пределами сайта). – Serlite

+0

Да, вы правы, я понял, что после загрузки сообщения. Я собираюсь отредактировать сообщение, включая соответствующий код. Спасибо. – ijromeo

ответ

0

Включите ваш спрайт, а также игровой объект. Таким образом, у вас нет никакого причудливого поведения, и все выглядит правильно.

0

In steerTowardsTarget(), 2nd line: Попробуйте изменить первый параметр Angle() из Vector2.right в Vector2.up.

+0

Привет! Да, я пробовал это раньше, но не работает. Машина сходит с ума и делает это: http://gph.is/2jW0yZm – ijromeo

+0

Вы пытались просто повернуть свой спрайт? Или использовать пустой игровой объект с вращающимся автомобилем в детстве? Ах, подождите. Вы изменили Vector2 ** и ** transform.right на .up во второй последней строке? А также два transform.right в OnNextTrigger() – Emaro

+0

Да, если я верну свой спрайт, отлично работает, но когда автомобиль появляется, появляется в сцене, и это выглядит не так элегантно. Да, я также пытался изменить «правильные вещи» вверх, но ничего. Автомобиль даже не идет таким путем :( – ijromeo

Смежные вопросы